アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

【プログラム】
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

A 回答 (2件)

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 *
    • good
    • 0

size_t origsize = strlen(static_cast<const char*>(orig))+1;


※ ただしUNICODEモードでコンパイル"しないこと"
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A