アプリ版:「スタンプのみでお礼する」機能のリリースについて

fwrite処理を行っているのですが、うまくファイルに出力されません。どこがおかしいか分からない次第です。
返答のほど、よろしくお願いします。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct ll{
long int bango;
char name[20];
char denwa[15];

};
FILE *fpbin; /*FILE構造体(グローバル変数)*/
struct ll *memalloc(void);
void main(void)
{

struct ll *p;
p = memalloc();

fpbin = fopen("bin","w+b");
printf("追加するNo 名前 tel >\n");
scanf("%ld %s %s", &p -> bango, p -> name, p -> denwa);
printf("%ld %s %s\n", p -> bango, p -> name, p->denwa);
fwrite(p,sizeof(struct ll),1,fpbin);

fclose(fpbin);
}

struct ll *memalloc(void)
{
struct ll *p;

if ( (p = (struct ll *)malloc(sizeof(struct ll))) != NULL ){
return p;
}

printf("メモリの動的割当に失敗しました。\n");
exit (1);

return p;
}

A 回答 (4件)

まず、fopenできていますか? ファイルは作られますか? fpbinの値はNULLではありませんか?

    • good
    • 0

プログラムはエラーチェックが甘いですが基本的には問題なさそうです。

。。
「うまくファイルに出力されません」の具体的な現象はどんなものでしょうか?エラー表示されて止まりますか?ファイルが作成されませんか?ファイルの中身がぐちゃぐちゃですか?
ファイルの内容を見る場合は、バイナリファイルですのでバイナリエディタやダンプツールで見ないとダメです。
    • good
    • 0

私の環境(unix)で試してみましたが、


『うまく』出力されてると思いますよ。

=== 実行結果 ===
追加するNo 名前 tel >
123 hoge 123-4567
123 hoge 123-4567

=== ファイルの中身 ===
00 00 00 7B
68 6F 67 65 00 00 31 A5 00 00 00 10 7B 03 79 80 40 00 31 C8
31 32 33 2D 34 35 36 37 00 03 7A 14 00 00 00 00
※見やすいように、
1行目はbango 2行目はname 3行目はdenwa
と害行してあります。
※nameとdenwaのデータの後半にはゴミが入っているようです
※3行目のdenwaはアライメントされて16バイトになっています
    • good
    • 0
この回答へのお礼

yasuchさんのとおり打ってバイナリエディタをよくみるときちんと表示されていました。ごみが表示されていたので間違って表示されているのかと思っていましたが違っているようでした。どうもありがとうございました。

お礼日時:2005/01/16 11:44

mallocしたらfreeしたほうがいいですよ。


使い捨てのプログラムなら別にいいけど。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!