Я пытаюсь сделать это:Неопределенное поведение или определенное поведение?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX_SIZE 50
int main()
{
char *s = malloc(sizeof(char)*MAX_SIZE);
do{
int r = read(STDIN_FILENO, s, MAX_SIZE);
if(r==-1) printf("error ");
else{
write(STDERR_FILENO, s, MAX_SIZE);
}
while(getchar()!='\n');
} while(strcmp(s,"end\n")!=0);
free(s);
return 0;
}
Мой вопрос: является fflush (STDIN) в этом случае неопределенное поведение? Как я искал в Интернете, я читал, что в случае fflush (stdin) определено поведение: По стандарту C пропуск входного потока в fflush - неопределенное поведение ... STDIN - это входной поток (буферизованный) Я думаю, что неопределенное поведение - это когда стандарт C не указывает, какое поведение должно иметь определенную функцию в конкретных случаях.
Так что это неопределенное поведение, следуя стандарту C справа?
Так в этом случае не определено поведение?
Не рекомендуется смешивать библиотеку stdio и использовать необработанные дескрипторы файлов. –
Этот вопрос очень неясен. Вы показали какой-то код, который не использует 'fflush' и полон нерелевантных отвлекающих факторов,' malloc' и 'free' бесполезны (просто используйте' char s [50] '),' MAX_SIZE' бесполезен, sizeof (char) 'бесполезен и т. д. Также« вопрос »- это то же самое, что повторяется 3 или 4 раза с немного иной фразировкой и плохой пунктуацией, тогда вы задаете один и тот же вопрос дважды. Не может ли все это просто быть «fflush (stdin)« неопределенное поведение »? и избавиться от всего остального ?! –
Почему плохая идея? @Ed Heal –