• ベストアンサー

Cstring(日本語含む)をcharに変換したいのですが

日本語を含む文字列が格納されたCstringをcharに変換したく 以下のプログラムを作成しましたがwcstombs_s() でエラーに なってしまいます。(戻り値が EILSEQ) どうしたらいいか、アドバイスをいただけないでしょうか? CString csPass("Testテスト"); char cName[512]; size_t sz = 0; errno_t err; err= wcstombs_s(&sz, cName, sizeof(cName), csPass.GetString(), _TRUNCATE); if(0 != err){ return; } 【環境】 WindowsXP VC++2008

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

  • ベストアンサー
回答No.1

CStringクラスが使えるならCStringAクラスを介してchar型配列に入れてみては。 CString csPass(_T("Testテスト")); char cName[512]; strcpy_s(cName, CStringA(csPass)); UnicodeにあってCP932(Shift_JIS)にない文字はおかしくなりますけど。 (wchar_t→char変換ということである以上回避しようがない。)

janjap
質問者

お礼

回答ありがとうございました。 確認したところ上手くいきました。頂いた注意点に気を付けながら使用したいと思います。 今回は本当にありがとうございました。

その他の回答 (1)

  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.2

MicrosoftのATLやMFCで提供されているCStringクラスには GetString()というメソッドはなかったと思いますが、 独自作成のCStringクラスですか? csPass.GetString()の結果をデバッガ等で 確認してみる必要があるように思います。 Microsoft標準のCStringクラスであれば、 wcstombs_s(&sz, cName, sizeof(cName), (LPCTSTR)csPass, _TRUNCATE); でよさそうに思います。 (参考) http://msdn.microsoft.com/ja-jp/library/awkwbzyc.aspx

janjap
質問者

お礼

回答ありがとうございます。 CStringクラスは独自作成のものではありませんが、私自身CStringクラスについてまだまた勉強不足のようです。 教えていただいた参考ページもとても勉強になりました。 今回は回答いただき本当にありがとうございました。