配列var [i]は、すべてのドライブの名前をlog.txtから読み込み、画面に出力します。その後、配列は '\ 0'に達するまで最初の文字だけが印刷されるまで印刷されます。なぜ分かりませんか?ファイルから読み取った後の文字配列の出力の問題
FILE *fp;
char var[512];
i = 0;
if (fp = fopen("log.txt", "r+")) {
while (fscanf(fp, "%c", &var[i]) != EOF) {
printf("%c", var[i]); -----------> Works Fine
i++;
}
}
fclose(fp);
printf("\n\n");
i = 0;
while(var[i] != '\0') {
printf("%c",var[i]); ------------------> Problem
i++;
}
出力:あなたは私に= 0を削除する必要が
■N a m e
C :
D :
E :
F :
G :
■N -------------> Problem
'' \ 0 '終了が含まれていないvar'、第二ループがランダムに停止するか、プログラムがクラッシュする可能性があります。一文字を読んでいるのであれば、代わりに 'fscanf'、ise' fgetc'を使わないでください。 'fgets'を使って行全体を読み込んで解析する方が良いでしょう。 – Pablo
私が気に入らないもう一つのことは、 'log.txt'ファイルに512バイトを超えないと仮定していることです。そのようなことを想定するのは危険です。一般的には、ユーザーの入力(およびそれもファイルを意味する)を信頼できないものとして扱うべきです。あなたはそのような苦しいバグを避けるでしょう。 – Pablo
@パブロlog.txtのサイズが不明であるとしましょう。そのような場合、配列に最大サイズしか割り当てられません。 –