首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我在连接字符串时会出现段错误?

为什么我在连接字符串时会出现段错误?
EN

Stack Overflow用户
提问于 2013-04-14 08:17:18
回答 1查看 92关注 0票数 0

我正在制作一个森林火灾模型,它模拟了火灾的蔓延。我们没有以图形方式显示森林,而是被指示以纯文本的形式将森林输出到控制台。因此,输出结果很难区分,所以我决定对不同的元素进行着色

代码语言:javascript
复制
int i;
int j;

//Initialize a string for what will be outputted to the screen
char output[2000]="";
//Initialize strings that will be concat'd to the main string
char tree[]= "\033[22;31m T \033[22;30m";
char burn[]=" B";
char dirt[]=" D";
char fizzled[]=" F";
char newl[]="\n";
for(i=0;i<25;i++){
    for(j=0;j<25;j++){
        if(forest[i][j]==1){
           strcat(output, tree);
        }else if(forest[i][j]==500){
            strcat(output,burn);
        }else if(forest[i][j]==-1){
            strcat(output,fizzled);
        }
        else{
            strcat(output,dirt);
        }

    }

    strcat(output,newl);

}
printf("------------------------------------------\n");
printf("%s",output);

健康的树在第一次迭代中会有不同的颜色,这是它们应该做的。然而,它随后返回了一个Segfault值,我不知道为什么会发生这种情况。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-14 08:24:46

看起来你的output数组溢出了。

"\033[22;31m T \033[22;30m"的长度超过了15个字符(我没有精确地计算)。在最坏的情况下,当所有东西都是树时,你可以得到这个模式25*25次,总数将超过15*25*25=9375个字符。而char output[2000]只能容纳2000个。

顺便说一句,如果您打算在output[]中使用N个字符,则应该在数组中为NUL字符串终止符'\0'再保留1个字符。

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

https://stackoverflow.com/questions/15994348

复制
相关文章

相似问题

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