2016-11-08 4 views
0

これは、ポインタやメモリ割り当てと関係があることを知っていますが、どうやって修正するのかよくわかりません。何らかの理由で、次のコードは、ファイルの最初の文字(パス "filename"で指定)を出力する必要がある場合は何も表示しません。Cのループ内でのchar配列の代入?

int text[1000] = {}; 

    FILE *fp; 
    fp = fopen(filename, "r"); 
    int i = 0; 
    while(1) { 
     int c = fgetc(fp); 
     if (c==EOF) { 
      break; 
     } else { 
      text[i] = c; 
     } 
    } 

    printf ("%c", text[0]); 

ありがとう!

+3

'i'をインクリメントすることはないので、' text [0] 'の文字だけを保存します。その結果、最後の文字(おそらく改行文字)は 'printf()'だけで書かれます。出力に空白行を表示することによってのみ改行を見つけることができます。 '(i) 'をインクリメントした場合、配列にあまりにも多くの文字を読み込むことを心配する必要があります。文字列を1文字だけではなく、おそらく出力してください。それ以外の場合は、最初の文字を変数に読み込んだ後、単に他の文字を読み込んで破棄することができます。そして 'fp'を使う前に' fopen() 'が成功していることを確認してください。 –

+0

%cを%dに変更すると、テキスト[0]に保存した文字のコード(ASCII)と、何も表示されなかった理由がわかります。 –

答えて

0

あなたは増分しないので、常にテキスト[0]を更新し、最後にテキスト[0]で '\ n'のみを更新します。それで何も印刷されません。

#include<stdio.h> 

int main() 
{ 

    char text[1000] = {}; 

    FILE *fp; 
    fp = fopen(filename, "r"); 
    int i = 0; 
    while(1) { 
     char c = fgetc(fp); 
     if (c==EOF) { 
      break; 
     } else { 
      text[i++] = c; 
     } 
    } 

    printf ("%c\n", text[0]); 
} 

これは正しい使い方です。

+1

は、 'i'がコースの「1000」に達した場合にも破損するはずです –