От man setbuf
в Ubuntu:
Вы должны убедиться, что пространство, на которое указывает buf, все еще существует в потоке времени, закрыто, что также происходит при завершении программы. Например, следующее недопустимо:
Неверный пример кода из справочной страницы:
#include <stdio.h>
int main(void)
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}
Почему он недействителен? Локальная переменная buf
уничтожается после возврата программы через return 0;
.