c語言中的字串函數
主要是兩大類,一類是拷貝的,一類是比較的,另一個就是其他的
拷貝的有:
1. strcpy
函數原型
char *strcpy( char *strDestination, const char *strSource );
函數功能
將strSource的內容拷貝到strDestination中去,包括' \0'
傳回值
返回strDestination的內容
特點
strSource和strDestination的記憶體地區可能重疊,沒有定義
沒有檢查strDestination的大小是否夠
2 strcpy_s
函數原型
| |
errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource ); |
函數功能
將strSource的內容拷貝到strDestination中去,包括' \0'
傳回值
成功返回0
特點
strSource和strDestination的記憶體地區可能重疊,沒有定義
檢查了strDestination的大小
3 memset
函數原型
void *memset( void* dest, intc, size_tcount);
函數功能
將count個c 賦值到dest裡面去,經常用於將字串清零。
傳回值
dest
4 memcpy
函數原型
void *memcpy( void* dest, const void*src, size_tcount);
函數功能
將count個字元從src中拷貝到dest中
傳回值
dest
特點
不能處理src和dest有記憶體重疊的情況(overlapping regions)
代碼原型
char* m_memcpy(char* dest, const char* src, int n){ char* p=dest;while (n) { if (*src!='\0') *p=*src; src++; p++; n--; } *p='\0'; return dest;}
5 memmove
函數原型
void *memmove( void* dest, const void*src, size_tcount);
函數功能
將count個字元從src中拷貝到dest中
傳回值
dest
特點
可以處理src和dest有記憶體重疊的情況(overlapping regions)
處理的方式就是判斷有沒有重疊的部分,有的話就從後往前拷貝
代碼原型
char* m_memmove(char* dest, const char* src, int n){ char* p=dest;if (src+n>p && src<p ) //有重疊for(int i=1;i<n+1;i++)*(p+n-i)=*(src+n-i);else //沒有重疊{while (n){*p=*src;src++;p++;n--;}}return dest;}
字串比較函數
1 strcmp
函數原型
int strcmp( const char *string1,const char *string2);
特點
不忽略大小寫
2 strncmp
函數原型
int strncmp( const char *string1,const char *string2,size_t
count );
特點
不忽略大小寫
3 memcmp
函數原型
int memcmp( const void* buf1, const void*buf2, size_tcount);
特點
同strncmp差不多,但是具體的差別還需要進一步研究呀
int r = strncmp("1234","1234",7); //字串為0退出,迴圈4次
int r2 = memcmp("1234","1234",7); //迴圈7次或者遇到不相等的時候退出。所以當比較的數大於字串長度時候,不安全啊。
也可以理解,strncmp是字串比較,所以可以用\0來判斷,但是void*的就不好判斷了。
4 strnicmp
函數原型
| |
int strnicmp( const char *string1, const char *string2, size_t count ); |
特點
不區分大小寫比較