マルチバイト文字を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;
はじめに_tsetlocale(LC_ALL,_T("));
mbstowcs_sの第三パラメータはワード単位なので
strlen(pszChar)*2ではなくnLenで
delete pszWchar;はdelete[] pszWchar;
ヘルプ(MSDN)に載ってるのでわからなくなったらまず読みましょう
「とーりすがり」の方
ご回答ありがとうございます。
ご指摘の内容の通り、MSDNの「第三パラメータはワード単位」は、私の方でも確認しており、
「nLen」でも既に試してみておりますが、結果は同じでした。前段でも記載してますが、直値
で7~20全てダメでした。
・ロケールはセットしましたか?
・_wcstombsはワイド文字をマルチバイト文字に変換なので
あなたがしたいこととは逆ですが、本当にうまくいきましたか?
ロケールセットしてませんでした。⇒セットしたら、上手く変換できました。
「mbstowcs_s_l」ではなく、「mbstowcs_s」の場合勝手に認識してくれるのかなぁと間違って
解釈してました。ありがとうございました。
はじめに_tsetlocaleって書いたのに…orz
ごめんなさい。
さっくり読み飛ばしてましたね♪
ごめんなさい。