在C中,打印到标准输出很容易,从stdio.h打印printf。但是,如何打印到stderr呢?我们可以使用fprintf来实现,但它的语法似乎很奇怪。也许我们可以使用printf来打印到stderr?
stdio.h
printf
fprintf
rlcwz9us1#
语法几乎与printf相同。使用printf,您可以给予字符串格式及其内容,即:
printf("my %s has %d chars\n", "string format", 30);
fprintf也是一样的,除了现在你还指定了打印的位置:
FILE *myFile; ... fprintf(myFile, "my %s has %d chars\n", "string format", 30);
或者在您的情况下:
fprintf(stderr, "my %s has %d chars\n", "string format", 30);
bprjcwpo2#
格式化输出到stdout和stderr的一些示例:
printf("%s", "Hello world\n"); // "Hello world" on stdout (using printf) fprintf(stdout, "%s", "Hello world\n"); // "Hello world" on stdout (using fprintf) fprintf(stderr, "%s", "Stack overflow!\n"); // Error message on stderr (using fprintf)
fjaof16o3#
#include<stdio.h> int main ( ) { printf( "hello " ); fprintf( stderr, "HELP!" ); printf( " world\n" ); return 0; } $ ./a.exe HELP!hello world $ ./a.exe 2> tmp1 hello world $ ./a.exe 1> tmp1 HELP!$
agyaoht74#
如果您不想修改当前代码,只想用于调试。添加此宏:
#define printf(args...) fprintf(stderr, ##args) //under GCC #define printf(args...) fprintf(stderr, __VA_ARGS__) //under MSVC
如果要回滚,请将stderr更改为stdout。这对调试很有帮助,但不是一个好的实践。
stderr
stdout
pwuypxnk5#
你知道sprintf吗?基本上和fprintf是一样的。第一个参数是目的地(在fprintf的情况下是文件,即stderr),第二个参数是格式字符串,其余的都是参数。我也推荐this printf (and family) reference。
sprintf
1rhkuytd6#
由于某种原因,还没有人提到eprintf(),这和fprintf(stderr, ...)是一回事。
eprintf()
fprintf(stderr, ...)
eprintf("ERROR: You have caused an error!!1!");
快速提示:如果使用stderr进行调试,可以使用__LINE__宏
__LINE__
#define printfError(str, ...) eprintf("ERROR at line " #__LINE__ ": " str, __VA_ARGS__) printfError("Division by zero"); // "ERROR at line 2: Division by zero
g2ieeal77#
要打印上下文,可以编写如下代码:
FILE *fp; char *of; sprintf(of,"%s%s",text1,text2); fp=fopen(of,'w'); fprintf(fp,"your print line");
7条答案
按热度按时间rlcwz9us1#
语法几乎与
printf
相同。使用printf
,您可以给予字符串格式及其内容,即:fprintf
也是一样的,除了现在你还指定了打印的位置:或者在您的情况下:
bprjcwpo2#
格式化输出到stdout和stderr的一些示例:
fjaof16o3#
1.虽然最初stdout和stderr都到达控制台,但两者都是独立的,可以单独重定向。
agyaoht74#
如果您不想修改当前代码,只想用于调试。
添加此宏:
如果要回滚,请将
stderr
更改为stdout
。这对调试很有帮助,但不是一个好的实践。
pwuypxnk5#
你知道
sprintf
吗?基本上和fprintf
是一样的。第一个参数是目的地(在fprintf
的情况下是文件,即stderr
),第二个参数是格式字符串,其余的都是参数。我也推荐this
printf
(and family) reference。1rhkuytd6#
由于某种原因,还没有人提到
eprintf()
,这和fprintf(stderr, ...)
是一回事。快速提示:如果使用stderr进行调试,可以使用
__LINE__
宏g2ieeal77#
要打印上下文,可以编写如下代码: