
No.3ベストアンサー
- 回答日時:
> 関数化した下記のコードが2回以上走ると※部分の
> 長さ取得するところで処理が返ってこなくなります
あなたのミスでしょう。
コレ↓はちゃんと動作しますから。
#include <windows.h>
#include <iostream>
#include <locale>
#include <cstdlib>
using namespace std;
wchar_t* conv(const char* str) {
int len = 0;
wchar_t * buf;
len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, NULL, 0);//※
buf = (wchar_t *)malloc(len);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, buf, len);
return buf;
}
int main() {
const char* input = "日本ちゃちゃちゃ";
wcout.imbue(locale("japanese"));
for ( int i = 0; i < 10; ++i ) {
wchar_t* output = conv(input);
wcout << output << endl;
free(output);
}
}
ありがとうございます
デバックで追っていったところ
ポインタの初期化ミスでした。
的確なアドバイスと的確なご指摘ありがとうございました。
Cをやり始めて3日目で日頃は
C以外のデフォルトUnicode環境な言語を
使用していましたのでつまづいてしまいました。
(初期化ミスは論外ですが。。。。(汗))
multibyte と widecharの違いも初めて知ることができました。
ここをクリアしたのであとは
メモリ管理には気をつけてプログラムを組んでいきます。
本当にありがとうございました。
またつまづいた時はお力添えをお願いします。
No.2
- 回答日時:
この回答への補足
回答ありがとうございます
アドバイス通り下記のようにしてみたのですが、
関数化した下記のコードが2回以上走ると※部分の
長さ取得するところで処理が返ってこなくなります
void conv (char * str) {
int len = 0;
wchar_t * buf;
len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, NULL, 0);//※
buf = (wchar_t *)malloc(len);
if (buf == NULL) {
return;
}
MultiByteToWideChar(
CP_ACP,
MB_PRECOMPOSED,
clipStruct -> clip,
-1,
buf,
len);
//以下bufを使用した処理
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
fgetsなどのときのstdinのバッ...
-
CStringをwchar_tに変換したい
-
str系関数を使わずに二つの文字...
-
2曲同時再生するにはどうした...
-
全角文字を含んだ文字の並びを...
-
テキストデータをそのままバイ...
-
strsetという関数
-
charでの計算?
-
Linuxでフォルダ内全ファイル名...
-
文字列から空白を取り除きたい...
-
コンパイルエラー invalid ope...
-
fgetsについて
-
recvfrom関数の戻り値がおかし...
-
絶対パスからのファイル名の切...
-
文字列がNULLか空文字列かの判定
-
getchar()を int でとる理由...
-
strlen関数と同じ働きをする関...
-
ファイル名である文字列からbas...
-
switch文で文字を比較すること...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構造体の各メンバにfor文からア...
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
間接参照のレベルが異なっています
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
charからLPTSTRへの変換方法
-
ネットワークにつながっている...
-
'const char *' 型は 'char *' ...
-
テキストデータをそのままバイ...
-
c言語でユーザ関数を利用して入...
-
atoi( ) の反対をやりたい
-
間接操作のレベルとは
-
-'0'の意味について
-
double型の値をchar配列に変換...
-
Linuxでフォルダ内全ファイル名...
-
配列をnビットシフトする
-
型変換
おすすめ情報