dポイントプレゼントキャンペーン実施中!

日本語を含む文字列が格納された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

A 回答 (2件)

CStringクラスが使えるならCStringAクラスを介してchar型配列に入れてみては。



CString csPass(_T("Testテスト"));
char cName[512];
strcpy_s(cName, CStringA(csPass));

UnicodeにあってCP932(Shift_JIS)にない文字はおかしくなりますけど。
(wchar_t→char変換ということである以上回避しようがない。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/20 23:08

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 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/20 23:15

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

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