C++中fprintf()函数与stdout、stderr

1 fprintf()函数

fprintf()函数的作用是将格式化的数据打印到流中。该函数的格式为

int fprintf(

FILE *stream

, const char *format [, argument ]...

);

其中,参数stream表示数据要被打印到的流。对于fprintf()函数的详细用法,请参考《利用文件流实现文件读写》

和《C++中scanf和printf系列函数简介》

2 stdout和stderr

stdout是标准的输出流,而stderr是标准的错误输出流。stdout和stderr的类型都是FILE*,在stdio.h中定义。默认情况下,stdout和stderr中的数据都会被打印到屏幕上。

3 将stdout和stderr作为fprintf()函数的参数

fprintf()函数的第一个参数是FILE*,而stdout和stderr的类型都是FILE*,所以stdout和stderr都可以作为fprintf()函数的第一个参数。

2.1 默认输出

对于fprintf()函数和stdout和stderr,有如下代码

fprintf(stdout, "Hello ");

fprintf(stderr, "World!");

因为在“2 stdout和stderr”中提到,默认情况下,stdout和stderr中的数据都会被打印到屏幕上,所以此时的输出如图1所示。

图1 默认输出

2.2 重定向输出

可以通过指令的方式将stdout和stderr的输出修改为指定的文件中。

2.2.1 默认方式重定向

使用“2.1 默认输出”中提到的代码,在编译程序之后,在exe程序所在目录的cmd下,输入如下指令

图2 默认重定向

 

其中,1.exe是编译生成的exe文件;右尖括号“>”是重定向符号;“1.txt”是重定位之后的目的文件。需要注意的是,使用默认方式重定向,只能重定向stdout,而不能重定向stderr,即此时stdout流中的数据保存到了1.txt,而stderr流中的输入依然在屏幕中显示,如图2、图3所示。

C++中fprintf()函数与stdout、stderr_第1张图片

图3 默认重定向的目的文件

 

2.2.2 参数指定方式

默认方式重定向只能重定向stdout流中数据的目的,可以通过指定参数的方式重定向stdout流和stderr流中数据的目的,如图4所示。

图4 参数重定向

 

从图中可以看到,参数数字1表示重定向stdout流中数据的目的,而参数数字2则表示重定向stderr流中数据的目的。需要注意的是,参数数字与右尖括号“>”之间不能有空格。

使用图5所示的指令,可以将同时将stdout流和stderr流中数据重定向。

图5 同时重定向

此时,1.txt的内容如图6所示。

 

图6 同时重定向的目的文件

你可能感兴趣的:(C++基础)