fputs(lpString,fp);
エラー:LPCTSTRをCONST CHAR*には変換できません。
文字化けというか、Unicode文字列をそのままテキストファイルとして書き込んだために正しく(シフトJISの)テキストとして扱われていないだけです。
通常の(シフトJISの)テキストファイルとして書き込むためには、一旦unicodeからシフトJISに変換(LPCTSTR=LPCWSTRからLPCSTR=CHAR *に変換)し、その後変換後のシフトJISの文字列をfputsで書き込む必要があります。
まず、WideCharToMultiByteでunicodeからシフトJISに変換してください。WideCharToMultiByteは、LPCTSTR(unicode環境ではLPCWSTR)の文字列を入力し、LPSTR(CHAR *と等価)の文字列を出力します。
その後、LPSTRの文字列をfputsで書き込んでください。
あるいは、fputsを使わず、fprintfを使うこともできると思います。fprintfはunicode文字列を受け取って、シフトJIS文字列でファイルに書き込むことができるようです。
fprintf(fp, "%S", lpString) または fprintf(fp, "%ls", lpString) でいけると思います(すみません、未確認です)
fprintf、_fprintf_l、fwprintf、_fwprintf_l (CRT)
printf 関数と wprintf 関数の書式指定フィールド (CRT)
通常、fprintfは %s で1バイト(シフトJIS)文字列を受け取りますが、%S と大文字にすることでワイド(unicode)文字列を受け取るようになるようです。
LPCTSTRは環境によって型の意味が変わるのですが、エラーメッセージから判断すると、_UNICODEが定義されている環境なのだと思います。
この場合、LPCTSTRはconst wchar_t*と等価ですので、fputwsを使うことになります。
より環境依存しないコードを記述するのであれば、_fputtsを利用します。
参考:
http://msdn.microsoft.com/ja-jp/library/t33ya8ky(VS.80).aspx
どうしても、fputsを利用するのであれば、変換が必要です。
参考:
http://f30.aaa.livedoor.jp/~kimkim/VC/string.html
何かの参考になれば。
文字化けというか、Unicode文字列をそのままテキストファイルとして書き込んだために正しく(シフトJISの)テキストとして扱われていないだけです。
通常の(シフトJISの)テキストファイルとして書き込むためには、一旦unicodeからシフトJISに変換(LPCTSTR=LPCWSTRからLPCSTR=CHAR *に変換)し、その後変換後のシフトJISの文字列をfputsで書き込む必要があります。
まず、WideCharToMultiByteでunicodeからシフトJISに変換してください。WideCharToMultiByteは、LPCTSTR(unicode環境ではLPCWSTR)の文字列を入力し、LPSTR(CHAR *と等価)の文字列を出力します。
その後、LPSTRの文字列をfputsで書き込んでください。
あるいは、fputsを使わず、fprintfを使うこともできると思います。fprintfはunicode文字列を受け取って、シフトJIS文字列でファイルに書き込むことができるようです。
fprintf(fp, "%S", lpString) または fprintf(fp, "%ls", lpString) でいけると思います(すみません、未確認です)
fprintf、_fprintf_l、fwprintf、_fwprintf_l (CRT)
printf 関数と wprintf 関数の書式指定フィールド (CRT)
通常、fprintfは %s で1バイト(シフトJIS)文字列を受け取りますが、%S と大文字にすることでワイド(unicode)文字列を受け取るようになるようです。
エラーはfputsw/_fputtsの両方で消えました。しかし、文字化けでして書き込まれてしまいます。unicodeの環境でコンパイルしています。どうしたらいいでしょうか?