"C2664: 'wcslen' : 1 番目の引数を 'char *' から 'const wchar_t *' に変換できません。" に関する原因と対処

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

スポンサード リンク

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

コンパイルエラーメッセージ:
error C2664: 'wcslen' : 1 番目の引数を 'char *' から 'const 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)
{
//ワイド文字の長さを表示する
char *multibyte = "こんにちは";
wchar_t widechar[100];
setlocale( LC_CTYPE, "jpn" );

size_t x = wcslen(multibyte);
printf("%Iu\n" ,x);
return 0; }


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

対処:
マルチバイト文字からワイド文字に変換してからwcslen 関数に渡します。
マルチバイト文字からワイド文字に変換するには mbstowcs 関数を使用します。


ソース(修正済み):

#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" );
int len = mbstowcs( widechar, multibyte, 100 );
size_t x = wcslen(widechar);
printf("%Iu\n" ,x);
return 0; }

スポンサード リンク



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