*标准输入输出流
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
//man
1.stdin
*0; //标准文件描述符;
*标准输入流;
2.stdout
*1;
*标准输出流;
3.stderr
*2;
*标准错误输出流
++++++++++(extend)
1.//man
Each of these symbols is a stdio(3) macro of type pointer to FILE,
and can be used with functions like fprintf(3) or fread(3).
2.//csdn
stderr与stdin,stdout一样,是流。
具体就是:
stdin是标准输入流,默认为键盘,
stdout是标准输出流,默认为屏幕,
stderr是标准错误流,一般把屏幕设为默认, 也可以输出到文件。
3.//csdn
stdin,stdout可以重定向到文件,stderr输出到屏幕;
所以如果输出错误消息,不要用printf("error"),fprintf(stdout, "error");
这是 因为消息可能会被重定向到文件;
要用fprintf(stderr, "error");
4.//百度知道
fprintf(stderr, "Can't open it!/n");
fprintf(stdout, "Can't open it!/n");
printf("Can't open it!/n");
这3句效果不是一样啊,有什么区别吗?
提问者: 假设还是如果 - 试用期 二级
最佳答案
有区别。
stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。
例如:
my.exe
Can't open it!
Can't open it!
Can't open it!
转向标准输出到磁盘文件tmp.txt
my.exe > tmp.txt
Can't open it!
用TYPE 看 tmp.txt的内容:
TYPE tmp.txt
Can't open it!
Can't open it!
5.//csdn
c的话,错误处理函数有assert,clearerr,dosexterr,ferror,harderr,hardresume,matherr,perror,strerror
举个strerror的例子
#include <stdio.h>
#include <errno.h>
int main( void )
{
char *buffer;
/*传一个表示文件不存在的ENOENT给strerror函数*/
buffer = strerror(ENOENT);
/*输出该ENOENT代表的错误信息*/
printf("The error is :%s",buffer);
return 0;
}
运行结果:
The error is :NO such file or directory
6.//百度知道
请问:
当文件指针fp返回NULL值而要提示出错信息时,
为什么用fprintf(stderr,"Error");比用printf("Error");更好?
越详细越好!谢谢各位了!
提问者: Wave_Dan - 书生 二级
最佳答案
一般情况下,你这两个语句运行的结果是相同的,没有区别,只有一下情况才有区别:
运行你的程序的时候,命令行上把输出结果进行的转向,比如使用下面的命令把你的程序a.c运行的结果转向到记事本文件a.txt:
a.exe > a.txt
在这样的情况,如果使用printf输出错误信息,会保存到a.txt文件里面,如果使用fprintf输出错误,会显示在屏幕上。
7.csdn
stderr,stdout
都是向终端输出数据。
stderr,可以在编译阶段输出。
stdout必须时在运行时刻。
8.