我最近才开始使用 C
中的 I/O
。这是我的问题 -
我有一个文件,从中读取输入。然后我使用 fgets()
将字符串读入缓冲区,以某种方式利用。现在,如果输入对于缓冲区来说太短,即如果第一次 fgets()
读取到 EOF
,会发生什么?fgets()
是否应该返回 NULL
(正如我在 fgets()
文档中所读到的)?似乎它没有返回,我也能够正确获取输入。此外,即使我的 feof(input)
也没有表示我们已经到达了 EOF
。
以下是我的代码片段。
char buf[BUFSIZ];
FILE *input,
*output;
input = fopen(argv[--argc], "r");
output = fopen(argv[--argc], "w");
/**
* If either of the input or output were unable to be opened
* we exit
*/
if (input == NULL) {
fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 1]);
exit(EXIT_FAILURE);
}
if (output == NULL) {
fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 0]);
exit(EXIT_FAILURE);
}
if (fgets(buf, sizeof(buf), input) != NULL) {
....
}
/**
* After the fgets() condition exits it is because, either -
* 1) The EOF was reached.
* 2) There is a read error.
*/
if (feof(input)) {
fprintf(stdout, "Reached EOF.\n");
}
else if (ferror(input)) {
fprintf(stdout, "Error while reading the file.\n");
}
feof(input)
仅在尝试读取超过 EOF后才会返回真值。它并不告诉你是否处于 EOF。 - lurkerfgets()
只读取了100个字节
(BUFSIZE
为512),那么fgets()
应该返回NULL
吗? - yadav_vi