strchr () находит '\ n' там, где, по-видимому, нет - PullRequest
0 голосов
/ 06 октября 2018

Я использую модифицированную функцию fgets () под названием s_gets (), которая удаляет новую строку из ввода или удаляет любой из оставшихся символов во входном буфере.Это выглядит следующим образом:

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* в файл, содержащий только строку apple в одной строке, puts() внутри предложения ifвыполняется и оператор printf() печатает Character before \n is e.Мой вопрос: откуда этот таинственный перевод строки?Это как-то связано с EOF?Я компилирую это с Apple LLVM версии 10.0.0 (clang-1000.10.44.2) на macOS 10.14.

1 Ответ

0 голосов
/ 06 октября 2018

Даже если строка «apple» написана в одной строке, символ новой строки автоматически добавляется в конец этой строки редактором (например, gedit).Вот почему вы это видите.


PS: Как упоминалось в rici: Почему текстовые файлы должны заканчиваться символом новой строки?

...