Next: , Previous: , Up: Formatted Output   [Index]


10.2 書式指定出力関数

以下で示す関数はそれぞれ対応するCライブラリの関数とほぼ同じ機能を持ちます。printfでは変数の可変リストを,vprintfは変数へのポインタをそれぞれ使用します。詳細は Variadic Functions in The GNU C Library Reference Manualか,‘man 3 va_start’を参照して下さい。

書式指定が間違っていたり,型指定が食い違っていたりした時の出力は予測不能です。GCCの書式指定チェック機構は,GMPの拡張指定に対応していないので,役に立ちません。

ファイルに対する出力関数であるgmp_printfgmp_fprintf関数は,書き込みエラー時には-1を返します。出力は"atomic"ではありませんので,書き込みエラー時には一部だけが書きこまれる可能性があります。Cライブラリのprintf関数やその派生関数が-1を返すようになっていれば,GMPの出力関数もそれにならってエラー時には-1を返します。

Function: int gmp_printf (const char *fmt, …)
Function: int gmp_vprintf (const char *fmt, va_list ap)

標準出力stdoutに表示を行います。通常は出力文字数を返し,エラー時には-1を返します。

Function: int gmp_fprintf (FILE *fp, const char *fmt, …)
Function: int gmp_vfprintf (FILE *fp, const char *fmt, va_list ap)

ファイルストリームfpに出力します。通常は出力文字数を返し,エラー時には-1を返します。

Function: int gmp_sprintf (char *buf, const char *fmt, …)
Function: int gmp_vsprintf (char *buf, const char *fmt, va_list ap)

bufにNULL終端子付きの文字列を形成します。返り値は,NULL終端子を除いた出力文字数になります。

bufスペースと,fmt文字列がメモリ空間を共有してはいけません。

bufスペース以上の出力を防止する機能はありませんので,これらの関数の使用はお勧めしません。

Function: int gmp_snprintf (char *buf, size_t size, const char *fmt, …)
Function: int gmp_vsnprintf (char *buf, size_t size, const char *fmt, va_list ap)

bufにNULL終端子付きの文字列を形成します。sizeバイト以上の書き込みはできません。従って,出力結果を全て補損しておきたい時には,sizeは文字列長+NULL終端子以上のスペースが必要になります。

返り値は,NULL終端子文を除いた生成すべき文字全体の長さとなります。retval >= sizeであれば,出力結果は最初のsize-1文字分に,NULL終端子を足した長さになります。

{buf,size}とfmt文字列とのメモリ空間共有は行わないで下さい。

返り値はISO C99 snprintf関数と同じです。Cライブラリのvsnprintf関数が古いGLIBC 2.0.xの形式であっても同様です。

Function: int gmp_asprintf (char **pp, const char *fmt, …)
Function: int gmp_vasprintf (char **pp, const char *fmt, va_list ap)

実行時におけるメモリ割り当て関数(see Custom Allocation)を使って確保されたメモリブロックに,NULL終端子付きの文字列を形成します。メモリブロックはNULL終端子を含む文字列分確保され,このブロックへのポインタは*ppに保存されます。返り値は,NULL終端子を除く生成文字列長となります。

Cのasprintf関数とは異なり,gmp_asprintfはメモリ不足の時にも-1を返さず,必要なだけメモリを確保しようとします。

Function: int gmp_obstack_printf (struct obstack *ob, const char *fmt, …)
Function: int gmp_obstack_vprintf (struct obstack *ob, const char *fmt, va_list ap)

既存オブジェクトopに追記します。返り値は書きこまれた文字数です。NULL終端子は付きません。

fmtは,更に増える可能性のあるopとは別に確保しなくてはなりません。

これらの関数はCライブラリがobstackを利用できる場合のみ使用できます。つまりGNUのシステム限定となります。詳細はObstacks in The GNU C Library Reference Manualをご覧下さい。