Cでは、printf
fromを使用して、標準出力への印刷は簡単stdio.h
です。
しかし、どのようにstderrに出力できますか?fprintf
明らかにそれを達成するために使用できますが、その構文は奇妙に見えます。多分私達はprintf
stderrへの印刷に使用できますか?
fprintf
ます。
Cでは、printf
fromを使用して、標準出力への印刷は簡単stdio.h
です。
しかし、どのようにstderrに出力できますか?fprintf
明らかにそれを達成するために使用できますが、その構文は奇妙に見えます。多分私達はprintf
stderrへの印刷に使用できますか?
fprintf
ます。
回答:
構文はとほぼ同じprintf
です。でprintf
使用する文字列の形式を与え、その内容は、IE:
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);
#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の両方がコンソールに表示されますが、どちらも個別であり、個別にリダイレクトできます。
知ってるsprintf
?基本的にはと同じですfprintf
。最初の引数は宛先(fprintf
ie の場合はファイルstderr
)、2番目の引数はフォーマット文字列、残りは通常の引数です。
また、このprintf
(および家族の)参照をお勧めします。
あなたのコンテキストを印刷するには、次のようなコードを書くことができます:
FILE *fp;
char *of;
sprintf(of,"%s%s",text1,text2);
fp=fopen(of,'w');
fprintf(fp,"your print line");