尝试将数组转换为具有空字符的字符串时程序崩溃

时间:2015-04-28 19:39:45

标签: c arrays string

我正在填充一个包含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。

3 个答案:

答案 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);