ページ 11

char型からWCHAR

Posted: 2012年3月17日(土) 00:10
by おならちゃん。
char型からWCHAR文字への変換に失敗してしまいます。
サイトを見ながら進めていった結果このようなプログラムができました。
そして実行してみたら結果は C だけでました。これはc:\0.bmpのcなのでしょうか?
ひとつずつしか、変換できないのでしょうか?
これはループさせて、二文字目やって三文字目やって、という風にやるしかないのでしょうか?

コード:

#include <stdio.h>
#include <DxLib.h>
#include <locale.h>

errno_t mbstowcs_s(
				   size_t *pReturnValue,
				   wchar_t *wcstr,
				   size_t sizeInWords,
				   const char *mbstr,
				   size_t count
				   );


char *setlocale(
				int category,
				const char *locale
				);

int main(){
char zpath[256]="c:\\0.jpg";
WCHAR JpgFile[MAX_PATH];
WCHAR BmpFile[MAX_PATH]=L"c:\\0.bmp";
	size_t wLen=0;
	errno_t err=0;
	setlocale(LC_ALL,zpath);
err=mbstowcs_s(&wLen,JpgFile,50,zpath,_TRUNCATE);

printf("%s\n",JpgFile);
//ここでJPGからBMPにします。
/*if (JpgToBmp(JpgFile, BmpFile)) {
 // success
 }*/
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,BmpFile,SPIF_UPDATEINIFILE|SPIF_SENDWININICHANGE);
return 0;
}
ご回答宜しく御願いたします。

Re: char型からWCHAR

Posted: 2012年3月17日(土) 00:26
by softya(ソフト屋)
WCHAR=ワイルドキャラクタ文字は文字コードが違うのでwprintfを使う必要があります。printfはマルチバイト文字用です。
あと書式文字列も"%s"ではなくL"%s"となります。

Re: char型からWCHAR

Posted: 2012年3月17日(土) 02:34
by ISLe
とりあえず
setlocale(LC_ALL,zpath); → setlocale(LC_ALL,"");
printf("%s\n",JpgFile); → printf("%ls\n",JpgFile);
でどうでしょう。
バッファサイズがなぜ50なのか分かりませんけど。

#mbstowcs_sよりMultiByteToWideCharを使うほうが良い気がする。

Re: char型からWCHAR

Posted: 2012年3月17日(土) 23:43
by おならちゃん。
ご回答ありがとうございます。

いろいろ試行錯誤させていただきました。
書き忘れてしまったのですが、表示したいのではなく、変換したかったのですが、
表示の方法さえわからなかったので、区別するために理解しやすかったです。
ありがとうございます。

Re: char型からWCHAR

Posted: 2012年3月17日(土) 23:53
by softya(ソフト屋)
おならちゃん。 さんが書きました:ご回答ありがとうございます。

いろいろ試行錯誤させていただきました。
書き忘れてしまったのですが、表示したいのではなく、変換したかったのですが、
表示の方法さえわからなかったので、区別するために理解しやすかったです。
ありがとうございます。
ここのルールですので解決したコードの提示をお願いします。