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 文字列ターミネータ'\0'.

于 2013-04-14T00:24:45.960 に答える