programing

C에서 stderr로 어떻게 인쇄 할 수 있습니까?

nasanasas 2020. 9. 3. 19:35
반응형

C에서 stderr로 어떻게 인쇄 할 수 있습니까?


C에서, 표준 출력에 인쇄하는 것은으로, 쉽게 printf에서 stdio.h.

그러나 어떻게 stderr로 인쇄 할 수 있습니까? 우리는 fprintf분명히 그것을 달성하기 위해 사용할 수 있지만 구문이 이상하게 보입니다. printfstderr로 인쇄하는 데 사용할 수 있습니까?


구문은 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);

예 :

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)

알고 sprintf계십니까? 기본적으로 fprintf. 첫 번째 인수는 대상 ( fprintfie 의 경우 파일 stderr)이고 두 번째 인수는 형식 문자열이며 나머지는 평소와 같이 인수입니다.

나는 또한 printf(및 가족) 참조를 추천 합니다 .


#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!$
  1. stderr은 일반적으로 버퍼링되지 않으며 stdout은 일반적으로 있습니다. 이로 인해 이와 같이 이상하게 보이는 출력이 발생하여 코드가 잘못된 순서로 실행되고 있음을 알 수 있습니다. 아닙니다. stdout 버퍼가 아직 플러시되지 않은 것입니다. 리디렉션되거나 파이프 된 스트림은 일반적으로 stdout 또는 stderr의 출력 만 볼 수 있으므로이 인터리브를 볼 수 없습니다.

  2. 처음에는 stdout과 stderr이 모두 콘솔에 제공되지만 둘 다 분리되어 개별적으로 리디렉션 될 수 있습니다.


현재 코드를 수정하지 않고 디버그 용도로만 사용하려는 경우.

이 매크로를 추가하십시오.

#define printf(args...) fprintf(stderr, ##args)
//under GCC
#define printf(args...) fprintf(stderr, __VA_ARGS__)
//under MSVC

변경 stderrstdout당신이 롤 다시하십시오.

디버그에는 유용하지만 좋은 방법은 아닙니다.


컨텍스트를 인쇄하려면 다음과 같은 코드를 작성할 수 있습니다.

FILE *fp;
char *of;
sprintf(of,"%s%s",text1,text2);
fp=fopen(of,'w');
fprintf(fp,"your print line");

참고URL : https://stackoverflow.com/questions/39002052/how-i-can-print-to-stderr-in-c

반응형