![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
fread処理を用いてファイルの内容を取得した後、printf("%s\n", p);で参照してみるとaaa 1 21 333
bb 24 325 6 c 7 82 98とまとめてファイルの値を取得してしまいます。この取得した値をひとつずつ分けてNODEのnameとtenに格納しようとしているのですがうまくいきません。どうすればいいでしょうか?
それと、第三引数で選択した値がレコードの個数とありますがすべて選択されてしまうのどうしてでしょうか?
test.txtの中身
aaa 1 21 333
bb 24 325 6
c 7 82 98
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<malloc.h>
typedef struct{ /*出力レイアウト*/
char name[20];
int ten[3];
}RECORD;
FILE *fpbin; /*FILE構造体(グローバル変数)*/
void main(void)
{
RECORD *p;
p = malloc(1);
fpbin = fopen("test.txt","r");
fread(p,sizeof(RECORD), 1, fpbin);
printf("%s\n", p);
}
No.1ベストアンサー
- 回答日時:
fwriteしたものならfreadでいいんでしょうが、この場合は、読み込んでいるものがテキストファイルなので、freadで読み込むのは適当ではないです。
あと
RECORD *p;
p = malloc(1);
は
RECORD *p;
p = (RECORD*)malloc(sizeof(RECODD));
の様にしないといけないと思います。
一行読み込みをして
sscanfなどを使ってそれぞれ変数に設定する必要があります。
No.4
- 回答日時:
freadで読むのであればバイナリデータのファイルを準備しましょう。
バイナリエディタを使ってtest.txtというファイルを作ってください。+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
000000 61 61 61 00 00 00 00 00 00 00 00 00 00 00 00 00
000010 00 00 00 00 01 00 00 00 15 00 00 00 4D 01 00 00
000020 62 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000030 00 00 00 00 18 00 00 00 45 01 00 00 06 00 00 00
000040 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000050 00 00 00 00 07 00 00 00 52 00 00 00 60 00 00 00
ついでに、mallocやprintfの部分がおかしいです。
void main(void)
{
RECORD *p;
p = malloc(sizeof(RECORD));
fpbin = fopen("test.txt","rb");
fread(p,sizeof(RECORD), 1, fpbin);
printf("%s\n", p->name);
}
No.3
- 回答日時:
fscanfを使いましょう。
void main(void)
{
RECORD rec;
fpbin = fopen("test.txt","r");
fscanf(fpbin, "%s %d %d %d", rec.name, &rec.ten[0], &rec.ten[1], &rec.ten[2]);
fclose(fpbin);
printf("%s %d %d %d\n", rec.name, rec.ten[0], rec.ten[1], rec.ten[2]);
}
これで1行分です。
複数行読み込むときは、fscanf を繰り返せばよいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
C言語で複数列のデータを1列の...
-
fscanfの使い方
-
C++で指定文字列のカウント方法...
-
空白を含んだ文字列がうまく格...
-
C言語でのCSVファイルの読み出...
-
char型2つを結合し、short型に...
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
独立係数について教えて下さい。
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語について。
-
「Aに対するBの割合」と「Aに対...
-
正負を反転させて出力するプロ...
-
EXCELの分散分析表のP-値が....
-
大学数学の問題です。 加法群Z/...
-
教えてください。数学Bの二項分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
C言語で複数列のデータを1列の...
-
printf による16進表示について
-
C言語のプログラムで、途中で止...
-
char型2つを結合し、short型に...
-
矢印キーを押下してコンソール...
-
#defineが使用するメモリ領域に...
-
【C言語】全角文字の配列を、全...
-
終了条件Ctrl+zについて,結果表...
-
空白を含んだ文字列がうまく格...
-
プログラミングの授業の課題です
-
リストの作成と出力(C言語)
-
c言語で文書を読み込み、単語の...
-
構造体メンバの初期化
-
エラーについて質問です。
-
reallocでエラー
-
C言語でのCSVファイルの読み出...
-
なぜ無限ループになるかが分か...
-
Cプログラムについて
-
C++で指定文字列のカウント方法...
おすすめ情報