-1
char * file = malloc(buffer);
assert(file != 0);
char str[20];
snprintf(file, buffer, "%s/%s", newestDirName, fileInDir->d_name);
FILE * input = fopen(file, "r"); // read
fseek(input, 0, SEEK_END);
fgets(str, 20, input);
printf("str = %s \n", str);
私はから読んでいたファイルは、最後の行があります:私はfseek(input, 0, SEEK_END)
左端から始まるカーソルで最後の行を取得する考えCプログラミングのfseekとfgetsはここで正しく使用されていませんか?
ROOM TYPE: END_ROOM
なぜ「ROOM TYPE: END_ROOM
」
を格納strがされていませんが最後の行の位置。これは間違っていますか?
私はfgets(str, 20, input)
が入力から20文字を得てstr
という変数に入れたと思っていました。これはchar *
です。
しかし、私はstr
を印刷するとき、私はSTRの値についてちんぷんかんぷんを取得:
str = ▒▒As=
あなたは* end *までのすべてを探した後、ファイルから* next *と読み替えると思いますか? –
ファイルの最後まで探します。 'fgets()'が読み込むファイルの最後の後には何もありません。ファイルの終わりの前の最後の行の先頭には移動しません。 'fgets(str、20、input)'は19文字まで読み取り、最後の文字の後ろにヌルバイトを配置することに注意してください。 19行目の文字の前に改行があれば19文字未満、20行目にnullのバイトが追加されます。あなたは常に入力関数からの戻り値をテストすべきです。 'fgets()'の戻り値はEOFを示すNULLになります。また、EOFでは、ストリングは決まった値に設定されていません。 –