人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

win32 vs2005 cで以下のコードを書いています。
static int count;
PAINTSTRUCT ps;
WCHAR str[10];

BeginPaint(hWnd,&ps);
wprintf(str,"%d",count);
TextOut(ps.hdc,10,20,str,wcslen(str));

textoutでcountに代入された数値を表示します。しかし、文字化けします。どうしてでしょうか?
unicode環境です。

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:ps STR Unicode Win32 コード
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● cx20
●60ポイント ベストアンサー

wprintf(str,"%d",count);

おそらく、勘違いをされているのだと思いますが、

文字列に値をセットするのは printf() ではなく sprintf() になります。

そして、sprintf() の UNICODE 版は、swprintf() になります。

■ ランタイム ライブラリ リファレンス / sprintf、swprintf
http://msdn.microsoft.com/ja-jp/library/ybk95axf%28VS.80%29.aspx

(wprintf() は、printf() の UNICODE 版なので、文字列には値はセットされません。文字化けしているのは、これが原因だと思われます。)


UNICODE 文字列を使う場合は、多くの文字列操作関数を UNICODE 版の関数に置き換えてあげる必要があります。

以下は、その置き換えるべき関数の一覧になります。

■ 汎用テキスト マップ / ルーチンのマップ
http://msdn.microsoft.com/ja-jp/library/tsbaswba%28VS.80%29.aspx

sprintf() を swprintf() に置き換えた場合は、以下のようになります。

swprintf(str, L"%d", count);

このように UNICODE 版の関数を使用する場合は ""(ダブルクォーテーション)の前に「L」という接頭字(プレフィックス)を追加する必要があります。

こうすることで文字列が UNICODE(wchar_t 型)として処理されます。


<参考情報>
■ charとUnicodeとワイド文字をごっちゃにしないために
http://marupeke296.com/CPP_charUnicodeWideChar.html
◎質問者からの返答

解決しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ