Programing

C에서 stderr로 인쇄하려면 어떻게 해야 하는가?

c10106 2022. 4. 16. 09:07
반응형

C에서 stderr로 인쇄하려면 어떻게 해야 하는가?

C에서는 stdout으로 인쇄하는 것이 쉬우며,printf로부터stdio.h.

그러나, 어떻게 더 stderr에 인쇄할 수 있을까?우리는 사용할 수 있다.fprintf분명히 그것을 성취하기 위해서, 그러나 그것의 구문은 이상하게 보인다.아마도 우리는 사용할 수 있을 것이다.printf인쇄할 수 있는 거야?

구문은 와 거의 같다.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);

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)
#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 buffer가 아직 빨개지지 않았을 뿐이야.리디렉션되거나 파이프로 연결된 스트림은 일반적으로 stdout의 출력만 보거나 stderr의 출력만 볼 수 있기 때문에 물론 이러한 인터리브를 볼 수 없을 것이다.

  2. 처음에는 stdout과 stderr가 모두 콘솔로 오지만, 둘 다 분리되어 있고 개별적으로 리디렉션될 수 있다.

현재 코드를 수정하지 않고 디버그 사용에만 사용할 경우.

이 매크로 추가:

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

변화하다stderrstdout뒤로 굴러가고 싶으면

디버그에는 도움이 되지만 좋은 연습은 아니다.

아십니까sprintf? 그것은 기본적으로 같은 것이다.fprintf. 첫 번째 인수는 대상(의 경우 파일)이다.fprintfstderr)), 두 번째 인수는 형식 문자열이며, 나머지는 평소와 같이 인수한다.

나는 또한 이 (그리고 가족)의 참조를 추천한다.

컨텍스트를 인쇄하려면 다음과 같이 코드를 작성하십시오.

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

반응형