我正在尝试使用stderr,但我对它的用法完全感到困惑.我正要回答这里提出的问题但是当我想先尝试时,我发现自己被困了.
我在这个链接中读到了关于stderr的信息,并且根据我尝试使用它的信息
FILE *stderr;
stderr = fopen("<path to file>","w");
.....//some code and conditions
fprintf(stderr,"found a error here");
Run Code Online (Sandbox Code Playgroud)
使用这个给我一个seg错误,我无法弄清楚为什么?
然后我使用了freopen(),然后我也得到了seg fault.Is stderr byitself将标准错误发送到某个默认文件而不是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;
}
Run Code Online (Sandbox Code Playgroud)
你不应该试图改写stderr自己.只是使用它.它是由运行程序的程序提供给您的.如果你的程序正在交互从shell的终端上运行,那么这两个stdout和stderr通常去到终端,但也有很多可能被覆盖的方式.它被覆盖的最常见方式是调用者已重定向stdout到文件,以保存输出,但保持stderr连接到终端,以便用户可以看到状态/错误消息.