でも、fscanf()やfprintf()はバイナリ書き込みするのではなく、テキストを書き込むもの なので注意が必要です。例えば、
1 2 3 4 | FILE* fp; wfp = fopen("hoge.txt", "wb"); fprintf(wfp, "%d", 2008); fprintf(wfp, "%d", 2009); |
としても、2008が整数型、すなわち4バイトで書き込まれる訳ではありません。 整数型をテキスト文字列"20082009"として書き込む訳です。従って、 以下のようにfscanf()を使って、2008、2009が別々に読み込まれる訳ではないのです。
1 2 3 4 5 | int int1, int2; FILE* fp; ifp = fopen("hoge.txt", "rb"); fscanf(ifp, "%d", &int1); fscanf(ifp, "%d", &int2); |
この場合、1回目のfscanf()で、20082009という文字列がint1に整数変換されて代入されてしまいます。 なので、以下のようにすることで、正常に読み書きできるようになります。
1 2 3 4 5 6 7 8 9 | FILE* fp; wfp = fopen("hoge.txt", "wb"); fprintf(wfp, "%d ", 2008); fprintf(wfp, "%d ", 2009); int int1, int2; FILE* fp; ifp = fopen("hoge.txt", "rb"); fscanf(ifp, "%d ", &int1); fscanf(ifp, "%d ", &int2); |
よく見ると分かるように、fprintf(), fscanf()ともに、%dのあとにスペース文字がありますね。
このように、文字列フォーマットを指定してあげることで、fprintf(), fscanf()でも読み書きが
簡単にできるようになりますよ。