こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ファイルから構造体へデータを格納(動的メモリ割り当て)

C言語の勉強をしいております。

typedef struct address {
char names[32];/* 名前 */
char tels[32];/* 電話番号 */
struct address *prev;/* 前のリスト */
struct address *next;/* 次のリスト */
}Address;

という構造体へ、ファイルから読み込んだテキストデータ(名前と電話番号がTABで区切られている)を格納したいのですが、配列ではなく、動的にメモリを確保しながら格納する方法を教えていただけないでしょうか?

処理の流れとしては、
・1つめの構造体の*prevにはnullを入れておく。
・1つめの構造体へファイルの1件目のデータを格納する。
・ファイルのデータがまだある場合には、malloc関数を使ってメモリを確保し、malloc関数からの戻り値を1つめの構造体の*nextへ格納する。
・構造体へ2件目のデータを格納する。

このような感じだろうという程度しか分からず、ソースも書けずにいます・・・。

配列を使用したサンプルはあるんですが、動的に処理を行う方法を教えていただけないでしょうか?

よろしくお願いいたします。

投稿日時 - 2008-10-28 13:21:19

QNo.4436189

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

Address* top = NULL;

while(データがある間) {
Address* work;
 if (top==NULL) {
  top = new Address;
  work = top;
  work->prev = NULL;
  work->next = NULL;
 }
 else {
  work = new Address;
  work->prev = NULL;
  work->next = top;
  top = work;
 }
 work->namesに格納
 work->telsに格納
}
こんな感じです、たぶんプログラム読んでもわからないかも
リスト処理(双方向、片方向)を勉強しないとだめですね
ちなみにソートするのなら、更に面倒です

投稿日時 - 2008-10-28 13:44:03

お礼

ご回答ありがとうございます。

記載し忘れていたんですが、C+ではなくC言語です。

>  top = new Address;
というのは、新しく構造体を作成しているという事でしょうか?

また、ソートや検索機能(名前や電話番号での前方一致や部分一致)も作成する予定です・・・orz

投稿日時 - 2008-10-28 13:48:33

ANo.1

>このような感じだろうという程度しか分からず、ソースも書けずにいます・・・。
そこまでわかっていれば十分ですよ。
ソースを書けないというのは、どのようなことがことが問題となっているのでしょうか?
malloc()の使用の仕方であれば、

Address *sample;
sample->next = (Address *)malloc( sizeof(Address) );

となります。
尚、一部わざとぼかしているところがあります。

投稿日時 - 2008-10-28 13:37:51

お礼

ご回答ありがとうございます。

分からないのは実装方法なんです・・・。
>このような感じだろうという程度しか分からず、ソースも書けずにいます・・・。

の箇所なんですが、実際にループを使用して、ファイルのデータを読み込み、構造体へ格納する方法が分からないんです・・・。
1つめの構造体、2つめの構造体というのを、どう指定すれば良いのかが分かりません・・・。

可能であれば教えていただけないでしょうか?

投稿日時 - 2008-10-28 13:43:58