0

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

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

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

谢谢

4

1 回答 1

4

看起来你正在溢出你的output数组。

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

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

于 2013-04-14T00:24:45.960 回答