字符串函数注意点
关于结束符
str_开关的函数在遇到'\0'会结束运行,而mem_开关的函数会一直运行到指定的数量
char chr1[50]="this is str1";
char chr2[50]="this\0 is str2";
strcpy(chr1,chr2);
printf("chr1[5]=%s\n",&chr1[5]);
strncpy(chr1,chr2,sizeof(chr2));
printf("chr1[0]=%s\n",chr1);
printf("chr1[5]=%s\n",&chr1[5]);
memcpy(chr1,chr2,sizeof(chr2));
printf("chr1[5]=%s\n",&chr1[5]);
输出如下:
chr1[5]=is str1
chr1[0]=this
chr1[5]=
chr1[5]= is str2
char str1[11]="0123456789";
char str2[6]="world";
strncpy(str1,str2,5);
printf("str1=%s\n",str1);
输出如下:
str1=world56789
- strcpy函数在复制完后在结尾会加上一个\0
- strncpy函数在复制时, 如果实际可复制字符少于指定的字符数, 则在结尾一直添加\0直到达到指定值; 如果实际可复制字符超过指定值,则只复制到指定值且不添加\0
- memcpy只会机械的复制直到达到指定值, 不会在结尾添加\0
字符串分割
char *strtok(char *s1,const char *s2);
char str[]="hello?wolrd?!";
char *p;
p=strtok(str,"?");
printf("%s\n",p);
p=strtok(NULL,"?");
printf("%s\n",p);
p=strtok(NULL,"?");
printf("%s\n",p);
printf("str=%s\n",str)
传入的s1必须为char数组, 该函数会修改s1字符值, 将指定的分割字符替换成\0