gpt4 book ai didi

c - C语言中stderr的使用

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:34 25 4
gpt4 key购买 nike

我正在尝试使用 stderr,但我对它的用法完全感到困惑。我正要 reply to a question asked here但是当我想先尝试一下时,我发现自己卡住了。

我读到了 stderr in this link ,根据我尝试像这样使用它的信息

FILE *stderr;

stderr = fopen("<path to file>","w");

.....//some code and conditions
fprintf(stderr,"found a error here");

使用它会给我一个段错误,我无法弄清楚为什么?

然后我用了freopen() ,然后我也得到了段错误。如果有的话,stderr 是否将标准错误发送到某个默认文件而不是 stdout。

这是我的代码,其中我只是尝试将 stderr 用作任何其他 FILE * 指针。可能我完全将其视为错误的执行方式。或者它只将标准编译器错误写入某些默认文件。需要帮助。

#include<stdio.h>
#include<string.h>
#include<time.h>
FILE *stderr;

int main()
{
time_t start,end;
volatile long unsigned counter;
start = time(NULL);
for(counter = 0; counter < 500000000; counter++)
{}

int i;
char str1[]="XXXXXXX-XXXXXXXXX-YYYYYYYY-TTTTTT";
char str2[]="pro1_0.0";
char str3[]="CC";
char str4[]="ZZ";
char str5[]="QQ";
char serialstring[100];
stderr = fopen("path to file","w");
//freopen("llog.out","w",stderr);

printf("enter a serial string:");
scanf("%s",serialstring);
if((strstr(serialstring,str1)))
{
printf("String1 matched\n");
if((strstr(serialstring,str2)))
{
fprintf(stderr,"str2 matched\n"); //it is where i tried using fprintf and stderr, rest of code is working pretty file
if((strstr(serialstring,str3)))
{
printf("str3 matched\n");
}
else if((strstr(serialstring,str4)))
{printf("str4 matched\n");}
else if((strstr(serialstring,str5)))
{printf("str5 matched\n");
for(i=232;i<290;i++)
{
printf("Sending some values: %d\n",i);}}
}
else{printf("str2 not matched\n");}
}
else{printf("str1 not matched\n");}

end = time(NULL);
printf("The loop used %f seconds.\n", difftime(end, start));
return 0;
}

最佳答案

您不应该尝试自己覆盖 stderr。就用它吧。它由运行您的程序的程序提供给您。如果您的程序是从终端上的 shell 交互式运行的,那么 stdoutstderr 通常都会转到终端,但是有很多方法可以被覆盖。它被覆盖的最常见方式是调用者将 stdout 重定向到一个文件,以保存输出,但让 stderr 连接到终端,以便用户可以看到状态/错误信息。

关于c - C语言中stderr的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19044462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com