为了检测它,我看到了以下if
情况:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char line[5];
while(fgets(line, 5, stdin)){
int length = strlen(line);
if (length == 4 && line[3] != '\n') {
puts("line too long");
return 1;
}
}
puts("correct file");
return 0;
}
在这里起作用:
$ cc test.c -o test
$ printf '012\n' | ./test
correct file
$ printf '012' | ./test
correct file
$ printf '0123\n' | ./test
line too long
但当长度等于最大值并且没有尾随换行符时会失败:
$ printf '0123' | ./test
line too long
检测不正确,因为整行都适合缓冲区;文件中没有更多内容可读取。
因此,请检查一下,
该函数检查上一个
feof()
操作是否在 eof 处结束。如果读取了 4 个字符,则没有在 eof 处结束,而是在 4 个字符后结束读取。您必须查看前面的“另一个”字符才能触发设置 eof。fgets
或者: