繁体   English   中英

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

[英]Program crashing when attempting to convert array into a string with null character

我用40个伪随机大写字母填充数组,然后通过在第41个元素处以空字符终止该数组将其转换为字符串,但是当我执行后者时,程序崩溃。 这是代码:

char s1[41];
int i;

for (i = 0; i < 41; i++)
{
    s1[i] = ((rand() % 26) + 'A');
}
s1[i] = '\0';

puts(s1);

如果我一次打印出数组中的每个字符而没有空赋值语句,则程序运行良好,但是当包含空赋值时,一切都会失败。 我需要将数组转换为字符串,然后使用puts函数。 为什么会这样呢? 字符串不是简单地以'\\ 0'(null)结尾的字符数组吗? 是什么原因造成的? 这是编译器错误吗? 附件是错误消息的屏幕截图。

如果有问题,我正在使用Microsoft Visual Studio Express 2013。

为了澄清这些注释,如果您不觉得它很明显:退出循环后i==41 ,则s1[i]正在数组边界之外写入。 这是未定义的行为,并且如上所述,您很幸运它崩溃了。

刚意识到我正在将空字符分配给数组外部的位置。 我需要递减我。

使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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM