人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:Char const C言語 FP エラー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tdoi
●35ポイント

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

何かの参考になれば。

◎質問者からの返答

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


2 ● ardarim
●35ポイント ベストアンサー

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ