stdin,stdout,stderr

 *标准输入输出流
#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.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值