2 u013012497 u013012497 于 2013.12.01 16:20 提问

c语言执行的结果是随机数是怎么回事?

#include
#include
struct stu
{
int num;
char name[2];
int Chinese;
int English;
int Maths;
int sum;
};
void main()
{
struct stu student[4]={{1,"ab",10,20,30},{2,"cd",40,50,60},{3,"ef",70,80,90}};
int i;
for(i=0;i<3;i++)
student[i].sum=student[i].Chinese+student[i].Maths+student[i].English;
for(i=0;i<3;i++)
if(student[3].sum<student[i].sum)
{ student[3].sum=student[i].sum;
strcpy(student[3].name,student[i].name);
}
printf("%s\n",student[3].name);
}

2个回答

u013013810
u013013810   2013.12.01 19:36
已采纳

应该是char name[2]的问题。
在C语言中字符串是以NULL(\0)结尾的,也就是说要多出一个字节,用来保存NULL。
所以如果name[2]赋了"ab",那么NULL就没有空间存了。所以打印出的name不确定。

测试一下

jinqmao
jinqmao   2013.12.03 14:25

在C语言中,字符串数组必须按“\0”作为结束符,所以在申请字符串遍历的时候,需要按“长度+1”申请;问题说明:字符串数组的拷贝strcpy及输出printf都是按结束符“\0”作为标记的,按上述程序,结果会依据当时内存情况,出现随机输出(开始两个字符是期望的)踩内存异常(strcpy操作)。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!