1

我正在使用一个名为 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) 编译它。appleputs()printf()Character before \n is e

4

1 回答 1

3

即使字符串“apple”写在一行上,编辑器也会自动在该行的末尾添加一个换行符(例如 gedit)。这就是你看到它的原因。


PS:正如 rici 提到的:为什么文本文件应该以换行符结尾?

于 2018-10-06T13:02:04.690 回答