字符串函数注意点

关于结束符

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

posted @ 2017-02-16 00:28  cfans1993  阅读(134)  评论(0编辑  收藏  举报