みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CStringをwchar_tに変換したい

CStringをwchar_tに変換したく思い、ネットで探したところ、
http://msdn2.microsoft.com/ja-jp/library/ms235631(VS.80).aspx
のページを見つけたので、下記のプログラムを組んで実行してみましたがエラーになって
しまいます。

【プログラム】
CString orig("Hello, World!");

// Convert to a char*
const size_t newsize = 100;

// Convert to a wchar_t*
// You must first convert to a char * for this to work.
size_t origsize = strlen(orig) + 1;
size_t convertedChars = 0;
wchar_t wcstring[newsize];
mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);

【エラー】
error C2664: 'strlen' : 1 番目の引数を 'CString' から 'const char *' に変換できません。
error C2664: 'mbstowcs_s' : 4 番目の引数を 'CString' から 'const char *' に変換できません。

&CStrinをconst char *でキャストしてもうまくいきません。
どこがおかしいのでしょうか?

【環境】
WindowsXP+VC++2005

投稿日時 - 2008-03-04 23:00:27

QNo.3833606

すぐに回答ほしいです

質問者が選んだベストアンサー

CStringはTCHAR *です。つまりVSがマルチバイト設定ならchar *ですし、
ユニコード設定ならWCHAR *(wchar_t *と同じです)になります。

仮にWCHAR *型に変換したいのなら
CString cStr = "元の文字列"; //cStr.GetString()はTCHAR *型
CStringW wideStr = cStr; //wideStr.GetString()はWCHAR *型
の様に一度CStringWを介した方が楽だと思います。

参考までに
CString ・・・GetString()で得られる型はTCHAR *
CStringA ・・・GetString()で得られる型はchar *
CStringW ・・・GetString()で得られる型はWCHAR *

投稿日時 - 2008-03-05 02:44:08

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

size_t origsize = strlen(static_cast<const char*>(orig))+1;
※ ただしUNICODEモードでコンパイル"しないこと"

投稿日時 - 2008-03-04 23:20:31