C语言的str函数有一个大坑,要慎用,碰到0就会返回,对于二进制数据来说很危险。
void _printf(char *str, int len)
{
int i=0;
for(i=0;i<len;i++)
printf("%x ",str[i]);
printf("\n");
}
void main(void)
{
char str1[10]={'a','b','c',0,'d'};
char str2[10]={0};
char str3[10]={0};
char str4[10]={0};
int len=0;
strcpy(str2,str1); //碰到0 就截胡了
strncpy(str3,str1,5); //碰到0 就截胡了
len = strlen(str1); //碰到0 就截胡了
memcpy(str4,str1,5); //数据完整保留了
printf("len =: %d\n",len);
printf("str1=: ");
_printf(str1,5);
printf("str2=: ");
_printf(str2,5);
printf("str3=: ");
_printf(str3,5);
printf("str4=: ");
_printf(str4,5);
//注意printf sprintf 碰到 0 也会截断的, 很显然str开头的函数都会有问题
}
运行结果:
heshao@u106:~/Hes_File/1102$ ./a.out
len =: 3
str1=: 61 62 63 0 64
str2=: 61 62 63 0 0
str3=: 61 62 63 0 0
str4=: 61 62 63 0 64
heshao@u106:~/Hes_File/1102$