我试图做到这一点:未定义的行为或定义的行为?
#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(标准输入),在这种情况下,一个未定义的行为吗? 正如我在互联网上搜索,我认为,在一种情况下,fflush(stdin)是一个定义的行为: 由标准C通过一个输入流fflush是一个未定义的行为... STDIN是一个输入流(缓冲) 我认为未定义的行为是在标准C没有指定在特定情况下哪些行为必须具有特定功能的情况。
因此,它是按照标准C权的未定义行为?
那么在这种情况下一个未定义的行为?
不是一个好主意混合stdio库,并使用原始文件的描述符。 –
这个问题很不清楚。你已经展示了一些代码,不使用'fflush'和充满无关的杂念,在'malloc'和'free'是无用的(只是用'个char [50]')'MAX_SIZE'是没用的,'的sizeof(char)'是无用的等等。此外,“问题”是同样的事情,重复3或4次,略有不同的措辞和糟糕的标点符号,然后你再问两次相同的问题。难道整个事情都不是简单的“是”fflush(stdin)'未定义的行为?“并摆脱所有的休息?! –
为什么一个坏主意? @Ed Heal –