printf,fprintf(stdout,stderr),sprintf等的使用方法及区别

名称描 述例 子
stdin标准输入键盘
stdout标准输出屏幕
stderr标准错误屏幕
stdprn标准打印机LPT1端口
stdaux标准串行设备COM1端口
  • 1,printf 就是到标准输出(stdout),在屏幕上打印出一段字符串来。
freopen("test1.txt", "w", stdout); printf("test file\n");  //重定向
  • 2,sprintf 就是把格式化的数据写入到某个字符串中。返回值字符串的长度。

  • 3,fprintf 是用于文件操作。(在shell下stdin, stdout, 和stderr的文件描述符分别是0, 1和2,)

stdout – 标准输出设备(printf("…")) ,遇到\n或者缓存到1024才会输出,可以重定向,用 1> 或者直接 >。
( 因为标准输入输出是行缓存,使用setbuf函数设置缓存区缓存为无缓存,使用dup2重定向标准输出为文件描述符
setvbuf(stdout, NULL, _IOLBF, 0) != 0;
dup2(file_fd, STDOUT_FILENO)

stderr – 标准错误输出设备,没有缓存,直接输出,可以重定向,用 2> 。

两者默认向屏幕输出。

  原型:int fprintf(FILE *stream,char *format,[argument]);       

  功能:fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指  定的文件。

例子:

char name[20] = "lucy"; 
    FILE *out;
    out = fopen( "output.txt", "w" );
    if( out != NULL )
    fprintf( out, "Hello %s\n", name );
    返回值:若成功则返回输出字符数,若输出出错则返回负值。

在test.c中输入如下的代码

#include<stdio.h>
int  main() 
{ fprintf(stderr,"stderr!\n"); 
 fprintf(stdout,"stdout!\n"); 
 printf("printf!\n"); 
 
 return 0;
} 

编译: gcc test.c -o test
执行:./test
输出:

stderr!
stdout!
printf!


若将输入重定向到一个temp.txt文件中,运行:./test>temp.txt 结果如下:

stderr!

查看temp.txt文件内容为:

stdout!

printf!


strerr是作为程序运行过程中的错误显示出来的,若想将它重写向到某文件中,需要运行如下命令:

./test 2>temp.txt

这样运行结果就为:

stdout!

printf!

查看temp.txt文件的内容是:

stderr!

参考链接

posted @ 2022-08-19 22:50  luoganttcc  阅读(316)  评论(0)    收藏  举报