- ベストアンサー
fwriteについての疑問
- C言語のfwrite関数を使って数値データをテキストファイルに書き込んだ結果、文字化けが起きて数値がわからなくなってしまいました。
- テキストファイルに数値を出力する方法について教えてほしいです。
- また、なぜこのような事象が起きたのかも知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんわ >数値もテキストファイルに出力 char buffer[256]; sprintf(buffer,"%e",fp[0]); //need stdio.h //fopen fwrite(f,1,strlen(buffer),fp); //need string.h //fclose こんな感じでしょうか。テストしていませんが… >できたらなぜこのようなことが起きたのか >教えてくださるとうれしいです。 変数の中身を知る、これってとてもいいことです! コンピューターの仕組みを知る上での第一歩なのですから。 double型は、IEEEというところでビットの並びが決まっています。 ですので、そのまま表示しようとするとゴミデータのように見えてしまいますね。 「double型の中身」を理解するとスッキリします。 テキストだけでの説明は難しいので、URLを張ります。 頑張って理解してください。 http://www.asahi-net.or.jp/~UC3K-YMD/Lesson/Section01/section01_06.html
その他の回答 (2)
- BLK314
- ベストアンサー率55% (84/152)
fopenの"テキスト/バイナリ"モードは改行コードの扱いにしか関係ありません。 MS-DOSとその流れを組むWindows上では"\r\n"の2バイトで改行させることが多いです。UNIXでは'\n'1バイトです。そこで、MS系で"\r\n"の2バイトを\n1バイトに変換する(書き込み時)のがテキストモード、変換しないのがバイナリモード、 それしかありません。 1行だけ書き込みたい(改行が含まれない)なら、バイナリもテキストも同じことです。文字列を書き込みたいからテキストモードでということではありません。 C言語の故郷ともいえるUNIX系ではテキストモード,バイナリモードという概念がそもそもありません。したがって、何にも考えず、文字列を書き込んでしまいます。もちろんファイル自体にはテキストファイル/バイナリファイルの区別はUNIX系でもあります。 テキストファイル/バイナリファイルと(fopenの)テキストモード、バイナリモードとを混乱しないでください。
- yama5140
- ベストアンサー率54% (136/250)
>文字化けがでて、数値がわかりません。 ・テキストファイル ・バイナリファイル の違いを調べてください。 現象からは、「バイナリファイル」ですよ。 >数値もテキストファイルに出力する方法があったらご教示よろしくお願いします。 fp = fopen( "test.txt", "w" ); と b をとってファイルオープンしましょう。 http://www.bohyoh.com/CandCPP/C/Library/fopen.html fwrite( f, sizeof(double), 5, fp ); ではなく、 for( i = 0; i < 5; i++ ) fprintf( fp, "%4.1lf", f[ i ] ); のように「書式付き」で出力してみてください。 http://www.bohyoh.com/CandCPP/C/Library/fprintf.html ☆「テキストファイルに出力」したいのに、「バイナリファイル」用の関数を用いていますよ。
お礼
回答ありがとうございます。教えていただいたURLで理解できるよう頑張ってみます!!