c字符串函数实现(1)---strncpy
strncpy原型: char* strncpy(char* dest,const char* src,size_t count); 函数说明: 1、当count <= strlen(src)+1(包括'\0') 逐个将src中count个字符赋予dest,包括'\0' 2、当count > strlen(src)+1时 将src字符(包括'\0')全部赋予dest,不够的补'\0'赋予dest 3、当count的大小超过dest的存储空间,则程序崩溃 #include <iostream> #include <cstring> #include <cstddef> #include <assert.h> char* my_strncpy(char* dest,const char* src,size_t count); int main() { const char* src = "sch"; char dest[] = "sdvnlskndvlsfghnd"; int num = strlen(dest)+1; strncpy(dest,src,0);
for(int i=0;i<num;i++) { if(dest[i]) printf("%c",dest[i]); else printf("\\0"); } printf("\n"); return 0; } char* my_strncpy(char* dest,const char* src,size_t count) { assert(NULL!= dest && NULL!= src); char* pdest = dest; int num_src = 0 ; while(src[num_src++]!='\0'); //num_src = strlen(src) + 1; if(count <= num_src) { while(count--) *dest++ = *src++; } else { int temp = count - num_src; while(num_src--) *dest++ = *src++; while(temp--) *dest++ = '\0'; } return pdest; }
总之一句话,就是将src指向的字符赋予dest,不够的在后面补'\0'。
不过strncpy在使用的时候有几点很容易出错的地方:
1、如果dest的内存空间不够存放count个字节内容,出现崩溃。
2、当count个字符恰好将dest内存占满时,也就是说,dest后面不会有‘\0’,此时用printf或者cout输出字符串时,会出现乱码现象。
所以一般来说,最好采用如下方式:
char fullname[MAX];
strncpy(fullname,s,MAX-1);
fullname[MAX-1] = '\0';