Путаница с примером setbuf недопустимого использования со страницы руководства - PullRequest
0 голосов
/ 04 марта 2019

Начиная с man setbuf в Ubuntu:

Вы должны убедиться, что пространство, на которое указывает buf, все еще существует к моменту закрытия потока, что также происходит при завершении программы.Например, следующее недопустимо:

Неверный пример кода из man-страницы:

#include <stdio.h>

int main(void)
{
    char buf[BUFSIZ];
    setbuf(stdin, buf);
    printf("Hello, world!\n");
    return 0;
}

Почему это недопустимо?Локальная переменная buf уничтожается после возврата программы через return 0;.

1 Ответ

0 голосов
/ 04 марта 2019

После выполнения return buf больше не существует, но выполнение программы продолжается с вызовом обработчиков выхода и закрытием потоков.Итак, когда поток закрыт, буфер не существует.

...