人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VCについておしえてください。DLLを書いていてある関数はワイド文字を引数に受け取り、ファイルにマルチバイトで書き込む関数です。コンパイルはとおりますが実行時にエラーとなり、プログラムが落ちます。解決のためにdllではなく、普通のプログラムを書きましたが正しく文字セット変換が出来ません。wcstombsが-1を返してエラーになります。どうしてでしょうか?引渡しの文字列をL""でワイド文字とできるのでしょうか? コンパイルオプションはマルチバイト文字で設定しています。

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>//setlocale( LC_CTYPE, "jpn" )のため


FILE *fpw1x;

int OutW(const wchar_t *str){
char strdummy[1000];
int i=wcstombs(strdummy,str,1000);
fputs(strdummy,fpw1x);

return 0;
}

int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){

if ((fpw1x = fopen("C:\\TEST.TXT", "a")) == NULL) {}
wchar_t* str=L"あいうえお";
OutW(str);
fclose(fpw1x);
}

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● cx20
●50ポイント

試しに、

//wchar_t* str=L"あいうえお";
wchar_t* str=L"abc";

と、してみてください。
正しく変換されているようであれば、日本語文字列の場合に変換に失敗している可能性があります。
その場合、以下のロケール指定が行われているか確認をお願いします。

setlocale( LC_CTYPE, "jpn" );

<参考情報>
■ C言語 ワイド文字列からマルチバイト文字列に変換 - stdlib.h - [ wcstombs ] | 勇躍のゴミ箱
http://simd.jugem.jp/?eid=122


2 ● SweetSmile1978
●50ポイント

Visual C++ の場合、標準ランタイムでの日本語 lacale って
サポートされてましたっけ?

Windows API を使う方がいいのでは?


cx20さんのコメント
日本語 LOCALE に関して、ヘルプにも記載があるので、特段、問題ないと思っています。 >|c| setlocale( LC_CTYPE, "jpn" ); ||< >> <参考情報> ■ 言語識別文字列 (CRT) http://msdn.microsoft.com/ja-jp/library/39cwe7zf.aspx >> setlocale が認識する言語識別文字列の一覧を次の表に示します。 オペレーティング システムがサポートしていない言語は setlocale で使用できません。 3 文字の言語文字列コードは Windows 2000 以降のオペレーティング システムでのみ有効です。 << << なお、setlocale() でロケール指定後、wcstombs() が機能することは、Windows7 + VC++2010 で確認しております。 他のバージョンで動作が異なるということでしたら、ご指摘願います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ