mbstowcs_s

[戻る]
みー 2007/10/30(火) 13:33:52
マルチバイト文字をUNICODEに変換する処理を作っているのですが、いくつかある、関数を試し
に試行錯誤していて、「mbstowcs_s」を使った場合だけ、上手く変換ができません。
(_wcstombszとかだと、普通に出来ました。)使い方自体よく分からないので、パラメータも
何種類か試してみたのですが。。。詳しい方ご教授ください!!
※ちなみに、引数の「strlen(pszChar)*2」の部分については、試しに7〜20の範囲で直値でも
やってみましたが、ダメでした。


    int    nLen;
    char    pszChar[20];
    WCHAR*    pszWchar;

    memset(pszChar,0x00,sizeof(pszChar));

    strncpy_s(pszChar,"ABCあいう",20);

    nLen = ::MultiByteToWideChar(CP_THREAD_ACP,0,pszChar,-1,NULL,0);
    pszWchar = new WCHAR[nLen];

    size_t nNameSize = 0;
    errno_t err = 0;

    err = mbstowcs_s(&nNameSize,
            pszWchar, 
            strlen(pszChar)*2,
            pszChar,
            _TRUNCATE);

    delete    pszWchar;

とーりすがり 2007/10/30(火) 14:20:10
はじめに_tsetlocale(LC_ALL,_T(""));
mbstowcs_sの第三パラメータはワード単位なので
strlen(pszChar)*2ではなくnLenで
delete    pszWchar;はdelete[]    pszWchar;

とーりすがり 2007/10/30(火) 14:28:31
ヘルプ(MSDN)に載ってるのでわからなくなったらまず読みましょう

みー 2007/10/30(火) 14:57:57
「とーりすがり」の方
ご回答ありがとうございます。
ご指摘の内容の通り、MSDNの「第三パラメータはワード単位」は、私の方でも確認しており、
「nLen」でも既に試してみておりますが、結果は同じでした。前段でも記載してますが、直値
で7〜20全てダメでした。

とーりすがり 2007/10/30(火) 15:18:39
・ロケールはセットしましたか?
・_wcstombsはワイド文字をマルチバイト文字に変換なので
 あなたがしたいこととは逆ですが、本当にうまくいきましたか?

みー 2007/10/30(火) 16:06:57
[[解決]]
ロケールセットしてませんでした。⇒セットしたら、上手く変換できました。
「mbstowcs_s_l」ではなく、「mbstowcs_s」の場合勝手に認識してくれるのかなぁと間違って
解釈してました。ありがとうございました。

とーりすがり 2007/10/30(火) 16:36:59
はじめに_tsetlocaleって書いたのに…orz

みー 2007/10/30(火) 17:12:59
ごめんなさい。
さっくり読み飛ばしてましたね♪
ごめんなさい。

古いスレッドには追加発言できません。