首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试将数组转换为具有空字符的字符串时程序崩溃

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

Stack Overflow用户
提问于 2015-04-29 03:39:45
回答 3查看 72关注 0票数 1

我正在用40个伪随机大写字母填充一个数组,然后将该数组转换为一个字符串,方法是在第41个元素处使用一个空字符终止它,但是当我执行后一种操作时,我的程序崩溃了。代码如下:

代码语言:javascript
运行
复制
char s1[41];
int i;

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

puts(s1);

如果我在不使用null赋值语句的情况下一次打印出数组中的每个字符,则程序运行得很好,但是如果包含null赋值语句,则所有操作都会失败。我需要将数组转换为字符串,然后使用put函数。为什么会发生这种情况?字符串不只是一个以'\0‘(null)结尾的字符数组吗?是什么导致了这种情况?这是一个编译器错误吗?附件是错误消息的屏幕截图。

如果重要的话,我正在使用Microsoft Visual Studio Express 2013。

EN

回答 3

Stack Overflow用户

发布于 2015-04-29 03:46:39

为了澄清注释,如果您不清楚:退出循环后的i==41,所以s1[i]在数组的边界之外编写代码。这是未定义的行为,如前所述,您很幸运它崩溃了。

票数 1
EN

Stack Overflow用户

发布于 2015-04-29 03:53:23

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

票数 1
EN

Stack Overflow用户

发布于 2015-04-29 03:46:50

设置为41到40,然后重试

代码语言:javascript
运行
复制
i < 40

通常,对这个数字进行试错可以得到不同的结果。

代码语言:javascript
运行
复制
   char s1[41];
int i;



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

puts(s1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29928421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档