swprintf | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


swprintf関数

概要 ワイド文字の配列へ、変換指定に沿って変換されたワイド文字列を出力する。
ヘッダ stdio.hwchar.h
形式 int swprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, …);
引数 s 結果を格納する配列を指すポインタ。
n 終端に書き込まれる L’\0’ を含めた、格納する最大文字数。あるいは 0。
format 変換指定を含んだ、あるいは含まないプレーンなワイド文字列。
format に含まれている変換指定子に対応した個数のパラメータ。
戻り値

実際に書き込まれた文字数(末尾のヌル文字を除く)を返す。エラーが発生した場合は、負数を返す。

引数 n 以上の文字数の書き込みが必要であった場合にも負数を返す。
詳細

変換指定を行い生成されたワイド文字列のうち、引数n で指定した文字数 - 1 文字までが格納され、末尾に L’\0’ が付加される。変換指定については、printf関数を参照。

関数名からして、マルチバイト文字列を扱う sprintf関数と対応していそうだが、引数 n が加わっており、安全性が増している。snprintf関数と似ているようでもあるが、引数n の意味するところが違う。snprintf関数と違って、変換後の文字列の長さが、格納先の配列の大きさを超えているときには、バッファオーバーフローを起こすことなく失敗する。
注意

必要な個数の実引数が指定されていない場合の動作は未定義。余分に指定されている場合には、評価は行われるが、swprintf関数としては無視する。

引数n に指定する値は文字数であって、大きさではないので、sizeof を使って計算する場合には注意が必要である。
使用例
#include <stdio.h>
#include <wchar.h>

int main(void)
{
    wchar_t str[10];

    swprintf(str, sizeof(str) / sizeof(wchar_t), L"%d", 1234567890);
    wprintf(L"%ls\n", str);
}

実行結果:

123456789
関連 マルチバイト文字版は sprintf関数のようでもあるし、snprintf関数のようでもあるが、いずれも仕様が異なるので注意。
引数に … ではなく、va_list を用いたバージョンとして、vswprintf関数がある。
解説章


参考リンク


更新履歴

’2018/4/17 全体的に文章を見直し修正。

’2018/4/8 「戻り値」の内容を修正。

’2018/2/1 C言語編全体で表記を統一するため、「フォーマット指定」を「変換指定」に改めた。

’2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る