ページ 11

SJISからUTF8への変換

Posted: 2013年10月08日(火) 13:25
by exce

コード:

#include <stdio.h>
#include <windows.h>

void ShiftJisToUTF8(char *szShiftJis,char **out)
{
	char bufUTF8[MAX_PATH];
	wchar_t bufUnicode[MAX_PATH];
	int iLenUtf8;
	int iLenUnicode;

	// まずUniocdeに変換する
	// サイズを計算する
	iLenUnicode = MultiByteToWideChar(CP_ACP,0,szShiftJis,strlen(szShiftJis)+1,NULL,0);

	if(iLenUnicode <= sizeof(bufUnicode)/sizeof(bufUnicode[0]))
	{
		MultiByteToWideChar(CP_ACP,0,szShiftJis,strlen(szShiftJis)+1,bufUnicode,MAX_PATH);

		// 次に、UniocdeからUTF8に変換する
		// サイズを計算する
		iLenUtf8 = WideCharToMultiByte(CP_UTF8,0,bufUnicode,iLenUnicode,NULL,0,NULL,NULL);

		if(iLenUtf8 <= sizeof(bufUTF8))
		{
			WideCharToMultiByte(CP_UTF8,0,bufUnicode,iLenUnicode,bufUTF8,sizeof(bufUTF8),NULL,NULL);
		}
	}

	strcat(*out,bufUTF8);
}

int main()
{
	char *szShiftJis = "ShiftJisからUTF8への変換テスト";
	char *buf;

	ShiftJisToUTF8(szShiftJis,&buf);

	printf("%s",buf);

	return 0;
}
コンパイルは通ったのですが、実行すると強制終了してしまいます。
どこが悪いのでしょうか?

Re: SJISからUTF8への変換

Posted: 2013年10月08日(火) 14:18
by h2so5
35行目のbufが有効なメモリ領域を指していません、