"C2440: '初期化中' : 'const char [<要素数>]' から 'wchar_t *' に変換できません。 " に関する原因と対処

このコンパイルエラーの原因と対処に関して説明します。

スポンサード リンク

Microsoft Visual C++にて以下のソースでコンパイルエラーが発生します:

コンパイルエラーメッセージ:
error C2440: '初期化中' : 'const char [<要素数>]' から 'wchar_t *' に変換できません。指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

ソース(バグ有り):

#define _CRT_SECURE_NO_DEPRECATE 1

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
//マルチバイト文字からワイド文字へコピーする
wchar_t *multibyte = "テスト";
wchar_t widechar[100];
setlocale( LC_CTYPE, "jpn" );
mbstowcs( widechar, multibyte, 100 );
printf("%ls\n" ,widechar);
return 0; }


原因:
マルチバイト文字が必要な引数に対して、ワイド文字が指定されています。
mbstowcs関数は第二引数にマルチバイト文字が必要です。

対処:
mbstowcs関数の第二引数にマルチバイト文字を指定します。

この例ではwchar_tでの宣言を char に修正します。


ソース(修正済み):

#define _CRT_SECURE_NO_DEPRECATE 1

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
//マルチバイト文字からワイド文字へコピーする
char *multibyte = "テスト";
wchar_t widechar[100];
setlocale( LC_CTYPE, "jpn" );
mbstowcs( widechar, multibyte, 100 );
printf("%ls\n" ,widechar);
return 0; }

スポンサード リンク



[コンパイルエラーコード、メッセージに戻る]