strncpy使用
特点:
1 strncpy(des,const src,sizeof(des));
2 返回值,返回的是目的字符串;
3 性能问题,当Des长度大于Src时,strncpy 会将des中多余的字节用0 进行填充。
4 当Src长度大于Des长度时必须手工设置‘\0’。
Snprintf
特点:
1 strncpy(des ,sizeof(des),"%s",src );
2 返回值,返回的是实际写入的字符串的数目;
3 性能问题,当Src长度大于Des长度时,需要扫描Src 。
4 不可省略第三个参数"%s",隐患是,如果src中包含%,会引发core。
字符串
字符串结尾自带’\0’
字符串越界问题
字符数组 (为了节省空间资源,整型数组)
特点
1 字符初始化,多余的为0 char szBuf1[10] = {‘a’,’b’,’c’,’d’,’v’};
2 字符数组没有结束标志,必须有 ‘\0’
3 字符数组有两种输出格式,按照‘\c’ 输出 ;按照’%s’输出
测试:
1.
char szBuf1[] = "aaaaabbbbccccc";
char szBuf2[10];
strncpy(szBuf2,szBuf1,10); // aaaaabbbbc@
snprintf(szBuf2,10,"%s",szBuf1);
//szBuf2[10]='\0'; //aaaaabbbbc
printf("%s\n",szBuf2);
2.
char szBuf1[]="aaa";
char szBuf2[10];
strncpy(szBuf2,szBuf1,10); //aaa 0
snprintf(szBuf2,10,"%s",szBuf1);
printf("%c\n",szBuf2[8]); //aaa 0
- 字符串越界问题
char szBuf1[4]={'a','b','c','d'};
//char szBuf1[5] = {‘a’,’b’,’c’,’d’};
char szBuf2[10];
strncpy(szBuf2,szBuf1,10); // abcdp abcd
snprintf(szBuf2,10,"%s",szBuf1); abcd p
printf("%s\n",szBuf2);
printf("%c\n",szBuf2[8]);
4.
char szBuf1[6]={'a','b','c','d'};
//char szBuf1[6]={97,98,99,100,0,0};
char szBuf2[10];
strncpy(szBuf2,szBuf1,10);
printf("%s\n",szBuf2); //abcd
printf("%c\n",szBuf2[8]); // @ 越界后 随机值