mbstowcs_s – プログラミング – Home

通知
すべてクリア

[解決済] mbstowcs_s


みー
 みー
(@みー)
ゲスト
結合: 17年前
投稿: 11
Topic starter  

マルチバイト文字を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;


引用未解決
トピックタグ
とーりすがり
 とーりすがり
(@とーりすがり)
ゲスト
結合: 18年前
投稿: 29
 

はじめに_tsetlocale(LC_ALL,_T("));
mbstowcs_sの第三パラメータはワード単位なので
strlen(pszChar)*2ではなくnLenで
delete pszWchar;はdelete[] pszWchar;


返信引用
とーりすがり
 とーりすがり
(@とーりすがり)
ゲスト
結合: 18年前
投稿: 29
 

ヘルプ(MSDN)に載ってるのでわからなくなったらまず読みましょう


返信引用
みー
 みー
(@みー)
ゲスト
結合: 17年前
投稿: 11
Topic starter  

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


返信引用
とーりすがり
 とーりすがり
(@とーりすがり)
ゲスト
結合: 18年前
投稿: 29
 

・ロケールはセットしましたか?
・_wcstombsはワイド文字をマルチバイト文字に変換なので
 あなたがしたいこととは逆ですが、本当にうまくいきましたか?


返信引用
みー
 みー
(@みー)
ゲスト
結合: 17年前
投稿: 11
Topic starter  

ロケールセットしてませんでした。⇒セットしたら、上手く変換できました。
「mbstowcs_s_l」ではなく、「mbstowcs_s」の場合勝手に認識してくれるのかなぁと間違って
解釈してました。ありがとうございました。


返信引用
とーりすがり
 とーりすがり
(@とーりすがり)
ゲスト
結合: 18年前
投稿: 29
 

はじめに_tsetlocaleって書いたのに…orz


返信引用
みー
 みー
(@みー)
ゲスト
結合: 17年前
投稿: 11
Topic starter  

ごめんなさい。
さっくり読み飛ばしてましたね♪
ごめんなさい。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました