strcpy,snprintf,memcpy的區別
這些函式的區別在於 實現功能 以及
操作物件 不同。
strcpy 函式操作的物件是 字串 ,完成 從 源字串 到 目的字串 的 拷貝 功能。
snprintf 函式操作的物件 不限於字串 :雖然目的物件是字串,但是源物件可以是字串、也可以是任意基本型別的資料。這個函式主要用來實現
(字串或基本資料型別)向 字串 的轉換 功能。如果源物件是字串,並且指定 %s 格式符,也可實現字串拷貝功能。
memcpy 函式顧名思義就是 記憶體拷貝 ,實現 將一個 記憶體塊 的內容複製到另一個 記憶體塊 這一功能。記憶體塊由其首地址以及長度確定。程式中出現的實體物件,不論是什麼型別,其最終表現就是在記憶體中佔據一席之地(一個記憶體區間或塊)。因此,memcpy 的操作物件不侷限於某一類資料型別,或者說可
適用於任意資料型別
對於字串拷貝來說,用上述三個函式都可以實現,但是其實現的效率和使用的方便程度不同:
- strcpy 無疑是最合適的選擇:效率高且呼叫方便。
- snprintf 要額外指定格式符並且進行格式轉化,麻煩且效率不高。
- memcpy 雖然高效,但是需要額外提供拷貝的記憶體長度這一引數,易錯且使用不便;並且如果長度指定過大的話(最優長度是源字串長度 + 1),還會帶來效能的下降。其實 strcpy 函式一般是在內部呼叫 memcpy 函式或者用匯編直接實現的,以達到高效的目的。因此,使用 memcpy 和 strcpy 拷貝字串在效能上應該沒有什麼大的差別。
另外, strcpy和memcpy功能上也有些差別: 比如: const char *str1="abc/0def"; char str2[7];
首先用strcpy實現: strcpy(str2,str1) 得到結果:str2="abc";也就是說,strcpy是以'/0'為結束標誌的。
再用memcpy實現: memset(str2,7); memcpy(str2,str1,7); 得到結果:str2="abc/0def"; 也就是說,memcpy是對記憶體區域的複製。當然,不僅能夠複製字串陣列,而且能夠複製整型陣列等其他陣列
相關推薦
strcpy,snprintf,memcpy的區別
這些函式的區別在於 實現功能 以及 操作物件 不同。 strcpy 函式操作的物件是 字串 ,完成 從 源字串 到 目的字串 的 拷貝 功能。 snprintf 函式操作的物件 不限於字串 :雖然目
strcpy與memcpy區別
strcpy和memcpy都是標準C庫函式,它們有下面的特點。 strcpy提供了字串的複製。即strcpy只用於字串複製,並且它不僅複製字串內容之外,還會複製字串的結束符。 已知strcpy函式的原型是:char* strcpy(char* dest, const char* src);m
memcpy、strcpy、snprintf的區別
這些函式的區別在於 實現功能 以及 操作物件 不同。 strcpy 函式操作的物件是 字串,完成 從 源字串 到 目的字串 的 拷貝 功能。 snprintf 函式操作的物件 不限於字串:雖然目的物件是字串,但是源物件可以是字串、也可以是任意基本型別的資料。這個函式主
strcpy ,strncpy ,strlcpy, snprintf, memcpy 用法、區別和效率
1、 strcpy strcpy 是依據 /0 作為結束判斷的,/0會被拷貝。如果 to 的空間不夠,則會引起 buffer overflow。strcpy 常規的實現程式碼如下(來自 OpenBSD 3.9): char *strcpy(char *to,
strcpy和memcpy的區別
字符串變量 函數 font pan -- 有效 簡述 溢出 mil strcpy和memcpy的區別 strcpy和memcpy都是標準C庫函數,它們有下面的特點。 strcpy提供了字符串的復制。即strcpy只用於字符串復制,並且它不僅復制字符串內容之外,還會復制字符
strcpy和memcpy的區別?
1)複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意型別的內容。strcpy只用於字串複製,並且還會複製字串的結束符。memcpy對於複製的內容沒有限制,用途更廣。 2)複製的方法不同。strcpy不需要指定長度,遇到結束符’\0’才會結束,所以容易溢位。memcpy則
筆試題:strcpy,memcpy,memset 的區別
1、strcpy strcpy的作用是拷貝字串,當它遇到'\0'時結束拷貝。 原型為:extern char *strcpy(char *dest,char *src); 就是把src的字串複製到dest中。 2、memcpy memcpy用來做記憶體拷貝,可以拿它拷
linux中strcpy、memcpy的用法與區別
strcpy提供了字串的複製,以 \0 為結束標誌(即一旦遇到資料值為0的記憶體地址,拷貝過程即結束)。 函式原型如下: char *strcpy(char *dest, const char *src); 其在核心(lib\string.h)原始碼的實現如下: char
strcpy/strncpy/sprintf/_snprintf/snprintf的區別
1. char *strcpy(char *str1, char *str2); 串拷貝 #include <stdio.h> #include <string.h> int main(void) { char string[10];
完成字串拷貝(sprintf、strcpy 及 memcpy 函式)函式之間的區別
這些函式的區別在於 實現功能 以及 操作物件 不同。 strcpy 函式操作的物件是 字串,完成 從 源字串 到 目的字串 的 拷貝 功能。 snprintf 函式操作的物件 不限於字串:雖然目的物件是字串,但是源物件可以是字串、也可以是任意基本型別的資料。 這個函式主要用來實現 (字串或基本資料型別)向
重寫strstr、strcpy、memcpy、memset、atof算法
tdi rcp tin amp tof mys log != include 1 #include<stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #incl
strcpy、memcpy c語言實現
以下程式碼沒有考慮重疊的情況 //strcpy char *__strcpy(char *dest, const char *src) { if(dest == NULL || src == NULL) return NULL; char *str
strcpy與memcpy
文章目錄 strcpy memcpy strcpy與memcpy區別 strcpy strcpy(dest,src) 把src地址開始且含有 null 結束符
strcpy及memcpy的記憶體重疊處理
strcpy和memcpy同是一個型別的函式,但實質上卻是不同的,他們的原型分別為: char *strcpy(char *dest, const char *src);void *memcpy(void *dest, const void *src, size_t coun
C字串函式strcmp\strcpy\strcat\memcpy
1.strcmp int strcmp(const char* str1, const char*str2){ assert(str1 != NULL&&str2 != NULL); while (*str1&&am
strcpy、memcpy函式的實現
本文轉載自:strcpy函式實現 大家一般認為名不見經傳strcpy函式實現不是很難,流行的strcpy函式寫法是: char *my_strcpy(char *dst,const char *src) { assert(dst != NULL);
strcpy、strncpy與memcpy的區別與使用方法
flow class created 行為 ons return sizeof creat 數組 今天做題用到了這兩個函數,不是很懂,學習了下~ 轉自http://www.cnblogs.com/houjun/p/4913216.html 本文參考《C 標準庫》編寫。
strcpy、sprintf、memcpy的區別
使用 orm des 內存拷貝 font 行數據 現在 mat 空間 char*strcpy(char *dest, const char *src); 其對字符串進行操作,完成從源字符串到目的字符串的拷貝,當源字符串的大小大於目的字符串的最大存儲空間後,執行該操作會出現段
面試題10——簡述strcpy,sprintf,memcpy的區別
三者主要有一下不同之處: (1)操作物件不同: strcpy的兩個操作物件均是字串 sprintf的操作源物件可以是多種資料型別,目的操作物件是字串 memcpy的兩個物件就是兩個人一可操作的記憶體地址,不限於何種資料型別。 (2)執行效率不同: memcpy最高,strcpy次之,spri
strcpy和sprintf和memcpy的區別.md
strcpy、sprintf和memcpy的區別 下面程式碼說明: #include <iostream> using namespace std; #include <string.h> void strcpyMethod() { /