strcpy:
函數原型:char *strcpy(char* dest, const char *src);
使用建議:非常不安全的函數,第二個參數src遇到'\0'纔會停止複製,dest太小就可能會內存操作越界;
strncpy:
函數原型:char *strncpy(char *dest,char *src,size_t n);
使用建議:較安全的函數,正好向dest複製n個字節;
若strlen(src)的長度小於n,n小於dest的空間,則不滿n的長度填充'\0';
若strlen(src)的長度大於等於n,則直接複製n個字符,不自動在dest的n個字節後填充NULL;
綜上所述,strncpy只操作n個字節的空間。
安全的使用方法:
在使用strncpy之前清零dest(memset等其他方式),使用時strncpy(dest, src, size-1);(size爲dest空間大小);
如果在使用strncpy之前不能判斷dest是否清零,則一般需要在strncpy(dest, src, size-1);後使用dest[size-1] = '\0';
strcat:
函數原型:char *strcat(char *dest, const char *src);
把src所指字符串添加到dest結尾處(覆蓋dest結尾處的'\0')並添加'\0'.
src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串.函數返回值:返回指向dest的指針。
使用建議:非常不安全的函數,dest必須有足夠的空間容納src的長度,並能在後面有空間填充'\0'。
strncat:
函數原型:char * strncat(char *dest, const char *src, size_t n);
把src所指字符串前n個字符添加添加到dest結尾處(覆蓋dest結尾處的'\0')並添加'\0'.
若追加的src長度少於n,則只追加src的長度並添加'\0'.
src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串.函數返回值:返回指向dest的指針。
使用建議:較安全的函數,最多向dest複製n個字節,並在字符串複製結束後在後面填充'\0'。
sprintf:
函數原型:int sprintf( char *buffer, const char *format, [ argument] … );
使用建議:非常不安全的函數,直接複製指定的字符串到buffer,不判斷內存是否越界操作。返回的是實際格式化的字節數。
snprintf:
函數原型:int snprintf(char *str, size_t size, const char *format, ...);
使用建議:較安全的函數,最多複製size-1個字節到str,並將str[size-1]置爲'\0';如果複製的字符串的長度小於str的空間,則在複製strlen(源字符串)後添加加'\0';返回的欲格式化輸出的字節數。如果size的大小超過str的大小,那麼複製完size-1個字節後,還是會在後面強制加上'\0'。
安全的使用方法:在使用snprintf之前清零dest(memset等其他方式),使用時snprintf(str,str_size,format, ......);(size爲str空間大小);
memcpy:
函數原型:void *memcpy(void *dest, const void *src, size_t n);
使用建議:內存區域如果重疊,其結果是位定義的。
memmove:
函數原型:void *memmove( void* dest, const void* src, size_t count );
使用建議:內存區域可以重疊,一定是成功的內存拷貝。
strcmp:
函數原型:int
strcmp
(
const
char
*s1,
const
char
*s2);
使用建議:比較的字符串必須以'\0'結尾,否則將內存越界比較。
strncmp:
函數原型:int strncmp ( const char * str1, const char * str2, size_t n );
使用建議:僅僅只比較n個字節,並不要求比較的字符串一定以'\0'結尾。