LPWSTRへの文字列代入 – プログラミング – Home

通知
すべてクリア

[解決済] LPWSTRへの文字列代入


茶織
 茶織
(@茶織)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

開発環境はVC++2005 MFCです。

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

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

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


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

もとい、「使用している文字コードの種類は」ですね。


返信引用
茶織
 茶織
(@茶織)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

VC2002では問題なく動作しているんですよね。
設定の問題なのでしょうか、教えていた箇所を重点に
調べてみます。


返信引用
茶織
 茶織
(@茶織)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

プロパティをマルチバイト設定にして切り抜けました。
理解できませんでした。


返信引用
茶織
 茶織
(@茶織)
ゲスト
結合: 18年前
投稿: 4
Topic starter  

だお


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

> 理解できませんでした。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました