为什么我在连接字符串时遇到段错误?

时间:2013-04-14 00:17:18

标签: c segmentation-fault

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

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

健康的树木在第一次迭代中的颜色不同,正如它们应该的那样。然而,它然后返回一个段错误,我不知道它为什么会发生。

由于

1 个答案:

答案 0 :(得分:4)

看起来你的output阵列已经溢出。

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

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