C에서 stderr로 어떻게 인쇄 할 수 있습니까?
C에서, 표준 출력에 인쇄하는 것은으로, 쉽게 printf
에서 stdio.h
.
그러나 어떻게 stderr로 인쇄 할 수 있습니까? 우리는 fprintf
분명히 그것을 달성하기 위해 사용할 수 있지만 구문이 이상하게 보입니다. printf
stderr로 인쇄하는 데 사용할 수 있습니까?
구문은 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
. 첫 번째 인수는 대상 ( fprintf
ie 의 경우 파일 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!$
stderr은 일반적으로 버퍼링되지 않으며 stdout은 일반적으로 있습니다. 이로 인해 이와 같이 이상하게 보이는 출력이 발생하여 코드가 잘못된 순서로 실행되고 있음을 알 수 있습니다. 아닙니다. stdout 버퍼가 아직 플러시되지 않은 것입니다. 리디렉션되거나 파이프 된 스트림은 일반적으로 stdout 또는 stderr의 출력 만 볼 수 있으므로이 인터리브를 볼 수 없습니다.
처음에는 stdout과 stderr이 모두 콘솔에 제공되지만 둘 다 분리되어 개별적으로 리디렉션 될 수 있습니다.
현재 코드를 수정하지 않고 디버그 용도로만 사용하려는 경우.
이 매크로를 추가하십시오.
#define printf(args...) fprintf(stderr, ##args)
//under GCC
#define printf(args...) fprintf(stderr, __VA_ARGS__)
//under MSVC
변경 stderr
에 stdout
당신이 롤 다시하십시오.
디버그에는 유용하지만 좋은 방법은 아닙니다.
컨텍스트를 인쇄하려면 다음과 같은 코드를 작성할 수 있습니다.
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
'programing' 카테고리의 다른 글
JSON 유형 내부의 배열 요소 쿼리 (0) | 2020.09.03 |
---|---|
C ++에서 긴 방정식을 구현할 때 높은 수준의 접근 방식을 통해 성능을 향상시킬 수있는 방법 (0) | 2020.09.03 |
두 개의 슬래시로 시작하는 URI… 어떻게 동작합니까? (0) | 2020.09.03 |
Android xml 오류 : RelativeLayout (@ id / LinearLayout_acc, @ id / ProgressBar_statusScreen)과 함께 "주어진 이름과 일치하는 리소스를 찾을 수 없음" (0) | 2020.09.03 |
Angular 2에서 TypeScript로 배열을 어떻게 필터링합니까? (0) | 2020.09.03 |