如何在C中打印到stderr?
在C语言中,使用如何在C中打印到stderr?,c,printf,stderr,C,Printf,Stderr,在C语言中,使用stdio.h中的printf可以轻松地打印到标准输出 但是,如何打印到stderr?显然,我们可以使用fprintf来实现它,但它的语法似乎很奇怪。也许我们可以使用printf打印到stderr?你知道sprintf?这与fprintf基本相同。第一个参数是目的地(在fprintf即stderr的情况下是文件),第二个参数是格式字符串,其余的是通常的参数 我还推荐。一些格式化输出到stdout和stderr的示例: printf("%s", "He
stdio.h
中的printf
可以轻松地打印到标准输出
但是,如何打印到stderr?显然,我们可以使用
fprintf
来实现它,但它的语法似乎很奇怪。也许我们可以使用printf
打印到stderr?你知道sprintf
?这与fprintf
基本相同。第一个参数是目的地(在fprintf
即stderr
的情况下是文件),第二个参数是格式字符串,其余的是通常的参数
我还推荐。一些格式化输出到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)
语法几乎与
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);
#包括
int main(){
printf(“你好”);
fprintf(stderr,“救命!”);
printf(“世界”);
返回0;
}
$./a.exe
救命啊!你好,世界
$./a.exe 2>tmp1
你好,世界
$./a.exe 1>tmp1
救命啊$
要打印上下文,可以编写如下代码:
FILE *fp;
char *of;
sprintf(of,"%s%s",text1,text2);
fp=fopen(of,'w');
fprintf(fp,"your print line");
如果您不想修改当前代码,只是为了调试使用 添加此宏:
#define printf(args...) fprintf(stderr, ##args)
//under GCC
#define printf(args...) fprintf(stderr, __VA_ARGS__)
//under MSVC
如果要回滚,请将stderr
更改为stdout
这有助于调试,但不是一个好的实践。它的语法有什么“奇怪”之处?这是印刷在哪里,如何和什么。我专注于它。这个问题所引起的唯一问题是,你觉得解决办法“奇怪”。否则就没有问题了。使用
fprintf
@Eugene。我同意你的看法。我觉得这很奇怪,因为我没有意识到stderr是一个文件:)这不会在前面的答案中添加任何内容,也不会真正回答这个问题。sprintf()语句会导致内存损坏。。。我强烈建议您仔细阅读指针、数组和字符串的工作原理。您也可以给它起一个单独的名字,也许是eprintf
或其他什么。(:O这实际上是GCC(3.2)的变量宏示例:)这与OP无关,措辞混乱。sprintf将“打印”到字符串,无法打印到stderr。
#define printf(args...) fprintf(stderr, ##args)
//under GCC
#define printf(args...) fprintf(stderr, __VA_ARGS__)
//under MSVC