C言語で LPCTSTR lpStringをfputsに入れるにはどのように書けばいいのでしょうか。以下ではエラーとなりました。

fputs(lpString,fp);

エラー:LPCTSTRをCONST CHAR*には変換できません。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2009/10/01 22:51:38
  • 終了:2009/10/07 22:32:36

ベストアンサー

id:ardarim No.2

ardarim回答回数892ベストアンサー獲得回数1422009/10/03 22:59:52

ポイント35pt

文字化けというか、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)文字列を受け取るようになるようです。

その他の回答(1件)

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752009/10/01 23:28:04

ポイント35pt

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

何かの参考になれば。

id:mai_mai_mail

エラーはfputsw/_fputtsの両方で消えました。しかし、文字化けでして書き込まれてしまいます。unicodeの環境でコンパイルしています。どうしたらいいでしょうか?

2009/10/02 00:24:34
id:ardarim No.2

ardarim回答回数892ベストアンサー獲得回数1422009/10/03 22:59:52ここでベストアンサー

ポイント35pt

文字化けというか、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)文字列を受け取るようになるようです。

  • id:tdoi
    何をしたいのかが分からないですが、何か文字列をファイルに書き込んで、そのファイルをメモ帳か何かで見て文字化けしているのでしょうか?
    全体で何をしたいのかが分からないと何とも言えませんので、そのあたりを明確にしてもらえますか?

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

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

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

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