2016-11-27 18 views
0

私のCコードで作業していて、2次元配列の印刷に問題があります。一度に1つの文字列を印刷する代わりに、尋ねられた点からアレイ全体を印刷します。C:2次元配列の印刷に関する問題

例として、入力は「Dog」、「Cat」、「Hat」です。それからそれは印刷されます:

DogCatHat 
CatHat 
Hat 

これは私のコードが行うためにsupposed:これはファイルから読み取ります。 char配列の配列を作成します。各char配列に30個の文字がある場合は、その時点で1文字のファイルから読み込みます。次に、行ごとに1つのchar配列を出力します。

これは、コードは次のようになります。

char fname[] = "folder/text.txt"; 
char arry[30][30]; 
FILE *file; 

file = fopen(fname, "r"); 
for(int x=0; x<30; x++){ 
    for(int i=0; i<30; i++){ 
     arry[x][i] = fgetc(file); 
    } 
} 

fclose(file); 
for(int i=0; i<30; i++){ 
    printf("%s\n", arry[i]); 
} 

ほとんどの場合、私はちょうど明白なミスを犯してきたが、私はそれを見つけることができませんよ。だから助けてください。

+0

あなたの質問のタイトルが奇妙です! 'printf()'が2次元配列を出力するとは言えません。それはできません。 –

+2

Cの文字列は、実際にはヌルで終了する*バイト文字列と呼ばれることに注意してください。そのターミネータは文字の配列を文字列に変換するものです。 –

+0

@BLUEPIXYそれは問題ではありません。私自身のコードを書くことに失敗しただけです。しかし、tes tjatは問題になるでしょう... – Adrian

答えて

1

ファイル内の文字列がnullで終了していないと思います。したがって、配列の最後の文字にヌル文字を配置する必要があります。

char arry[30][30] 

for(int x=0; x<30; x++){ 
    for(int i=0; i<29; i++){ //You can write 29 characters + '\0' 
     arry[x][i] = fgetc(file); 
    } 
    arry[x][29] = '\0'; 
} 
for(int i=0; i<30; i++){ 
    printf("%s\n", arry[i]); 
} 
+0

はい!ありがとうございました!レイ・ハーメルも示唆していたように、私はarry [30] [31]を作成し、 '\ 0'を追加しました。 – Adrian