C言語関係掲示板

過去ログ

No.251.構造体の内容をファイルに読み書き


No.1515

構造体の内容をファイルに読み書き
投稿者---ふるや(2002/05/17 00:10:00)


struct data{ /* 構造体data型の宣言 */
char maker[20]; /* メーカー名    */
int maker_code; /* メーカーコード */
char name[20]; /* 車種名 */
int name_code; /* 車種コード */
int cc; /* 排気量 */
long price; /* 販売価格 */
};
struct data list; /* 構造体変数 list を宣言 */
struct data *dp=&list; /* data型をもつポインタdpにlistの先頭アドレスを設定*/

このように定義された構造体でデータを入力しファイルに書き込みます。
そのデータをファイルから読み込む場合、汎用性を高めるために

struct data list[20];

など、構造体配列を使用しないでファイルの内容を読み込みたいのですが
どうすれば良いのでしょうか?






No.1520

Re:構造体の内容をファイルに読み書き
投稿者---ともじ(2002/05/18 16:12:44)


こんにちは。

>そのデータをファイルから読み込む場合、汎用性を高めるために
>
>struct data list[20];
>
>など、構造体配列を使用しないでファイルの内容を読み込みたいのですが
>どうすれば良いのでしょうか?

すみません、汎用性を高めるという意味がいまひとつわかりません。
つまり、構造体ではなく、バイナリデータで一括して受け取り、
いろいろな型で使いたいということなのでしょうか。
いろいろな型で使いたいのであれば、共用体を使うといいのでは
ないでしょうか。



No.1523

Re:構造体の内容をファイルに読み書き
投稿者---かずま(2002/05/18 18:59:16)


> そのデータをファイルから読み込む場合、汎用性を高めるために
> struct data list[20];
> など、構造体配列を使用しないでファイルの内容を読み込みたいのですが
> どうすれば良いのでしょうか?

配列を使うと、データの個数が限定されるので汎用性がないと
いうことでしょうか。

データの個数が分かれば、malloc で領域を確保することによって、
それを任意の大きさの配列として使用できます。

個数を知る方法ですが、ファイルの先頭に書いておくとか、
固定長レコードのファイルなら、ファイルサイズが分かれば
個数は分かりますよね。

ファイルサイズを知る方法ですが、stat または fstat を使う、
あるいは、<stdio> だけでやるなら、fseek でファイルの終わり
にシークし、ftell でそこの位置を知ることでファイルのサイズ
が得られます。バイナリモードで fopen しておくことと、実際
の読み込みの前に、rewind でファイルの先頭に戻しておくこと
に注意が必要です。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.06.28
Copyright(c) 2000-2002 TOMOJI All Rights Reserved