int main()
{
char a[2],b[2];
strcpy(a,"00");
strcpy(b,"00");
printf("%s------%s\n",a,b);
return 0;
}
输出结果:------00
求解,a的值哪去了,被吃了吗?
原因有几点:
strcpy不会做边界检查,在你这段代码的表现是:a,b,都是长度为2,而strcpy时,"00"字符串还含有一个字符串结束符'\0',a[0]的值,先赋值为'0',之后又被赋值为'\0'了。
所以,此时的数组长度至少应该为3;
printf函数,使用%s时,它是以'\0'为结束符的,如果没有遇到'\0',就会一直打印下去。打印a的时候,因为a[0]='\0',所以就什么都打印不出来。
改进方案:
数组长度改为大于等于3;
strcpy改为 strncpy(a, "00", 2); 但是这样会出现上述原因2的问题,遇到'\0'才会停止,所以,通常会打印出现乱码。
说的真好,之前一直都没注意这一点呢
不好意思,问题不在这
追答好的,前面的回答我也看到了,不过我想问一下,我的这个程序你试了吗?反正输出结果我没发现什么错误,我正在查…………