- ベストアンサー
C言語でのファイルの読み書き方法について
- C言語のストリームを勉強中の私が、fopen(), fread(), fwrite()などの関数を使ったファイルの読み書き方法について困っています。
- 具体的なプログラムの説明とソースコードを記載しています。プログラムは浮動小数点数の配列をファイルに書き込み、再度読み込むものです。
- しかし、実行後にファイルをテキスト形式で開くと文字化けして表示される問題が発生しています。エラーが出ないため原因がわかりません。解決策を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
モードフラグをバイナリ指定しているのでテキスト形式では数値に該当する文字コードの文字が見えてしまいます。 数字をテキストで読めるように書き込みたい場合は,数値を文字列に変換後のほうが良いかと思います。
その他の回答 (4)
- wormhole
- ベストアンサー率28% (1626/5665)
>それでは、このソースコードではmyfile内で文字化けが起こるのは仕方がないと思って良いのでしょうか? そもそも、そのプログラムではmyfileはテキストファイルとして扱ってはいませんから文字化けとか以前の話です。
お礼
回答ありがとうございます。 助かりました。
プログラムの冒頭を char d[] = { "10.2, 5.3, 7.91, 1.23, 7.7," "6.4, 89.12, 6.43, 5.55, 2.5" }; に変更してプログラムをコンパイル、実行し、myfileをテキスト形式で開いてみてください。 次に最後のfor文を printf("%s\n", d); に置き換えてコンパイル、実行して表示を確認してください。 それから、テキストファイルとバイナリファイルの違いを勉強しましょう。
お礼
回答ありがとうございます。 勉強し直して理解を深めます。
- Wr5
- ベストアンサー率53% (2173/4061)
>結果が上手く表示されず困っています。 最後のprintf()で正しく表示されているんじゃないですか? 浮動小数点の関係で誤差があるかも知れませんが。 >myfileをテキスト形式で開くと > : >と文字化けして表示されてしまいます。 人間が読める形式で書き出してませんから当然かと。 コンピューターが読みやすい形式と人間が読みやすい形式が同じとは限りません。 人間が読みやすい形式で書き出したいのならば、1つずつprintf()やfprintf()などで書き出して下さい。 write()1回で…というわけには行きません。
補足
回答ありがとうございます。 DOS画面上ではしっかり表示されます。 ただ私の予想では、myfile内でもdouble d[10]が表示されるものだと思っていたので、文字化けして表示されていたので、あれ?って感じでした。 それでは、このソースコードではmyfile内で文字化けが起こるのは仕方がないと思って良いのでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
何がダメなんでしょうか?
お礼
回答ありがとうございます。 シンプルで分かりやすかったです。