我正在使用一个名为 s_gets() 的修改后的 fgets() 函数,它从输入中删除换行符或丢弃输入缓冲区中的任何剩余字符。如下所示;
char *s_gets(char *str, int n, FILE *pf) {
char *ret_val;
char *find;
ret_val = fgets(str, n, pf);
if (ret_val) {
find = strchr(str, '\n');
if (find) {
puts("Newline was found.");
printf("Character before \\n is %c\n", *(find - 1));
*find = '\0';
} else {
while (getchar() != '\n')
continue;
}
}
return ret_val;
}
当我使用此函数并将其传递给仅包含单行FILE*
字符串的文件时, if 子句内部运行并且语句打印. 我的问题是这个神秘的换行符是从哪里来的?这和EOF有关系吗?我在 macOS 10.14 上使用 Apple LLVM 版本 10.0.0 (clang-1000.10.44.2) 编译它。apple
puts()
printf()
Character before \n is e