LPWSTRへの文字列代入

[戻る]
茶織 2007/03/19(月) 17:13:49
開発環境はVC++2005 MFCです。

タブコントロールの作成に下記を行われてます。

TC_ITEM tci;
sprintf( (char*)&tabname[0], "%s%02d", "TAB", (i));
tci.pszText    = tabname;    
とやるとtci.pszTextの文字列が化けてしまいます。

解決方法を教えてください。
宜しくお願い致します。

PATIO 2007/03/19(月) 17:23:57
使用コードはUNICODEでしょうか?
ならば、sprintfを使っている事自体が間違いだと思いますよ。
LPWSTRが何を意味しているのかきちんと調べましょう。
意識してUNICODEを使用しているのであれば、
TCHAR関連の関数を一通り調べてみる事をお勧めします。

PATIO 2007/03/19(月) 17:24:47
もとい、「使用している文字コードの種類は」ですね。

茶織 2007/03/19(月) 17:53:01
VC2002では問題なく動作しているんですよね。
設定の問題なのでしょうか、教えていた箇所を重点に
調べてみます。

茶織 2007/03/19(月) 18:18:44
プロパティをマルチバイト設定にして切り抜けました。
理解できませんでした。

茶織 2007/03/19(月) 18:19:03
[[解決]]
だお

PATIO 2007/03/23(金) 17:20:12
> 理解できませんでした。

ぐはっ。
理解できないのでは解決した事にならないと思うけれど。
VS2005以前の環境は使用する文字コードの標準がマルチバイトだったので
文字列を扱う関数はマルチバイト用の物がデフォルトで使用されていたのです。
VS2005以降はユニコードを標準で使用するようになったので
デフォルトで使用される関数がユニコード用の物になりました。
これによりデバッガで標準で表示される内容もユニコード扱いになるので
化けて表示されなくなると言うわけです。

理解できないで終わってしまわないで、文字コードと国際化について
じっくり勉強した方がいいですよ。
あと、この辺の切り替えに振り回されたくなければ、TCHAR系の関数を調べると
吉でしょう。これも文字コードと国際化絡みで出てきます。

古いスレッドには追加発言できません。