您的位置:首页 > 其它

stdin,stdout,stderr

2009-10-29 19:37 344 查看
*标准输入输出流

#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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: