简单c语言,大神快来

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'才会停止,所以,通常会打印出现乱码。

追问

说的真好,之前一直都没注意这一点呢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-07
你这程序都编译不了还能输出?你用的啥编译器
#include <stdio.h>
int main()
{
char a[2],b[2];

strcpy(a,"00");
strcpy(b,"00");
printf("%s------%s\n",a,b);

return 0;
}
试一下,绝对不会错追问

不好意思,问题不在这

追答

好的,前面的回答我也看到了,不过我想问一下,我的这个程序你试了吗?反正输出结果我没发现什么错误,我正在查…………