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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ムンバ

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

#1

投稿記事 by ムンバ » 16年前

こんばんは。お世話になります。

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

↓バイナリファイルを作るプログラム(参考書のサンプルプログラム引用)
#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
です。

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

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

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

YuO

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

#2

投稿記事 by YuO » 16年前

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

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

ムンバ

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

#3

投稿記事 by ムンバ » 16年前

YuOさん、ご指摘ありがとうございます。

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

に、間違いありません。

ムンバ

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

#4

投稿記事 by ムンバ » 16年前

あれっ!? ^^;

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



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

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

ABC, 14, 15, 16

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る