教えてください。以下のソースでWideCharToMultiByte(CP_ACP,0,LPCWSTR(s1),wcslen(s1),s2,y,NULL,NULL);を実行すると結果が文字化けします。wcslen(s1)を6に書き換えると正しく表示されます。なぜでしょうか?



vs2005 vc consoleアプリ

#include "stdafx.h"
#include "windows.h"


int _tmain(int argc, _TCHAR* argv[])
{
wchar_t s1[6]=_T("10.00"); //配列を5にすると10.00は初期のサイズが足らないとエラー
char s2[6];

printf("s1の文字はunicodeで :");wprintf(s1);printf("\n");

size_t z=wcslen(s1);
printf("s1の文字の長さは:");
printf("%d\n",z);



int y=WideCharToMultiByte(CP_ACP,0,LPCWSTR(s1),-1,NULL,0,NULL,NULL);//必要なバイト数を返す
printf("s1をS2に格納するのに必要なバイト数は:");
printf("%d",y);
printf("\n");

//WideCharToMultiByte(CP_ACP,0,LPCWSTR(s1),wcslen(s1),s2,y*2,"A",NULL);
WideCharToMultiByte(CP_ACP,0,LPCWSTR(s1),wcslen(s1),s2,y,NULL,NULL);//wcslen(s1)がおかしい
printf(s2);
getchar();
return 0;

結果
s1の文字はunicodeで :10.00
s1の文字の長さは:5
s1をS2に格納するのに必要なバイト数は:6
10.00フフフフフフフフフフフ1

回答の条件
  • 1人2回まで
  • 登録:2009/10/08 18:05:15
  • 終了:2009/10/08 18:33:02

回答(1件)

id:makeworld No.1

makeworld回答回数75ベストアンサー獲得回数232009/10/08 18:26:38

ポイント60pt

C言語では、文字列に終端記号(0)なので、配列のサイズは文字列の長さ+1必要です。

C言語文字列講座

  • id:makeworld
    すみません、変な日本語になっていました。訂正します。
    C言語では、文字列に終端記号(0)が必要なので、配列のサイズは文字列の長さ+1が必要です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません