我正在填充一个包含40个伪随机大写字母的数组,然后通过在第41个元素处以空字符终止它来将数组转换为字符串,但是当我执行后者时我的程序崩溃了。这是代码:
char s1[41];
int i;
for (i = 0; i < 41; i++)
{
s1[i] = ((rand() % 26) + 'A');
}
s1[i] = '\0';
puts(s1);
如果我在没有null赋值语句的情况下一次打印出一个数组中的每个字符,程序运行就好了,但是当包含空赋值时,一切都会失败。我需要将数组转换为字符串,然后使用puts函数。为什么会这样?字符串不仅仅是以'\ 0'(null)结尾的字符数组吗?是什么造成的?这是编译错误吗?附件是错误消息的屏幕截图。
如果重要的话,我正在使用Microsoft Visual Studio Express 2013。
答案 0 :(得分:1)
为了澄清这些评论,如果对你不明显:退出循环后i==41
,那么s1[i]
正在写入数组的边界之外。这是未定义的行为,如上所述,你很幸运它崩溃了。
答案 1 :(得分:1)
刚才意识到我正在将空字符分配给数组之外的位置。我需要减少我。
答案 2 :(得分:0)
制作41到40然后再试一次
i < 40
通常使用此编号的试错可以给您不同的结果
char s1[41];
int i;
for (i = 0; i < 40; i++)
{
s1[i] = ((rand() % 26) + 'A');
}
s1[i] = '\0';
puts(s1);