ページ 11

バイナリファイルの書き込みと読み出しにつきまして

Posted: 2008年12月18日(木) 00:02
by ムンバ
こんばんは。お世話になります。

今、参考書を参考にバイナリファイル(ファイルの入出力)の勉強をしている所です。
参考書のサンプルの実行結果(参考書に書かれてる結果)と
そのサンプルを私が実行した結果とが、少し違っているので
何度もスペルミスなど無いかどうか確認してみたのですが、うまく表示できませんでした。

↓バイナリファイルを作るプログラム(参考書のサンプルプログラム引用)
#include <stdio.h>

int main()
{
        FILE *fp;
        char *str = "ABC";
        int a[3] = {14, 15, 16};

        fp = fopen("binary.b", "wb");
        fwrite(str, sizeof(char), strlen(str), fp);
        fwrite(a, sizeof(int), 3, fp);
        fclose(fp);

        printf("書き込み終了。\n");
        return 0;
}
↑これをバイナリエディタで開いて見ると↓

41 42 43 0E 00 00 00 0F 00 00 00 10 00 00 00

です。

↓このプログラムは、↑のバイナリファイルを読み出すプログラムです。(参考書のサンプルプログラム引用)
#include <stdio.h>

int main()
{
        FILE *fp;
        int a[3];
        char buf[8];

        memset(buf, '\0', sizeof(buf[8]));

        fp = fopen("binary.b", "rb");
        fread(buf, sizeof(char), 3, fp);
        fread(a, sizeof(int), 3, fp);
        fclose(fp);
        printf("%s, %d, %d, %d\n", buf, a[0], a[1], a[2]);

        return 0;
}
参考書の実行結果(コマンドプロンプト)には

ABC, 14, 15, 16

となっているのですが、私の実行結果(コマンドプロンプト)では

ABCフフフフフフフフフフフフフ■(←小さい白塗りの四角), 14, 15, 16

となってしまいます。

OS:Windows VISTA
環境:VC++ 2008
です。

フフフフフフフフフフフフフ■(←小さい白塗りの四角)
↑この部分が、できれば表示されない様にしたいのです。

無視して、このまま先に進んだ方がいいのでしょうか?
それとも、ここで解決しておいた方がいいのでしょうか?^^;

ご指導の程、宜しくお願い致します。

Re:バイナリファイルの書き込みと読み出しにつきまして

Posted: 2008年12月18日(木) 00:17
by YuO
> memset(buf, '\0', sizeof(buf[8]));

ここ,本当に参考書の通りですか?
memset(buf, '\0', sizeof(buf));
ではなかったですか?

Re:バイナリファイルの書き込みと読み出しにつきまして

Posted: 2008年12月18日(木) 00:22
by ムンバ
YuOさん、ご指摘ありがとうございます。

memset(buf, '\0', sizeof(buf[8]));

に、間違いありません。

Re:バイナリファイルの書き込みと読み出しにつきまして

Posted: 2008年12月18日(木) 00:32
by ムンバ
あれっ!? ^^;

memset(buf, '\0', sizeof(buf[8]));<参考書は、このソースです。(汗



memset(buf, '\0', sizeof(buf));

YuOさんの、ご指摘通りに修正して実行したところ

ABC, 14, 15, 16

と、うまく実行表示されました。
ありがとう御座います。

自己解析してみます。
どうもありがとうございました。(謝