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

学習し始めてから時間が経ちましたが、まだ初心者のまま・・・少しずつ頑張っている状態の者です。

今回はタイトルのことで御質問させてください。

関数Read(自己作成)でcsvファイルの内容を読み取り、読み取ったデータを用意しておいた構造体の変数ポインタを利用して代入しようと試みているのですが・・・要領がつかめません。

それで気になったのですが、読み込んだファイルを用意しておいた構造体に入れるにはどんな方法があるかよろしければご教授下さい。
私としてはforを使ったやり方があるのなら是非見本を見せてほしいのですが・・・

ちなみに、私が考えていたプログラム案は以下の通りです。

構造体にはcsvファイル・1レコード分の情報が入る構成。
構造体と読み取るファイルの構造は酷似しているが構造体全てに入る情報でない場合がある。
構造体には必要な分、配列領域を確保する

ファイルの先頭アドレスはファイルポインタに代入。
構造体の先頭アドレスはポインタ変数に代入。

  main関数とは別の関数の引数に2つのアドレスをコピー。
★ そこでファイルデータを構造体へ代入しmainに戻って出力する。
  
その関数での戻り値は特になし(成功したら0・・・と考えていたのですが使い道が今のところはreturnだけです)

★で特に悩んでいるので、よろしくお願い致します。

A 回答 (1件)

>構造体には必要な分、配列領域を確保する


を、「構造体の配列を必要なだけ確保する」として、

#define MAX_RECORDS 100;
typedef struct {
 int num;
 char name[20];
} record;

record rec[MAX_RECORDS];
/* record *rec; */
/* rec = malloc(sizeof(record) * MAX_RECORDS); */

read( rec );

-----------------------------

read(record[] record_array) {
   ・
   ・
   record[i].num = n;
   strcpy(record[i].name,name);
   ・
   ・
}

という感じで構造体の配列を渡して使うことができると思います。
コメントアウトした方は、配列ではなくmallocで領域を確保し、ポインタに入れていますが、関数への引き渡し方は全く同様です。
(ただ、明示的にキャストが必要かも知れません)

実際に動かしていないので、コンパイラから警告が出るかも知れませんが、関数への引き渡し方と使い方のヒントとして参考にしてください。
    • good
    • 0
この回答へのお礼

返信遅くなりまして申し訳ありません。
御解答ありがとうございました

キャストを使うとどうしても後手後手にプログラムがなってしまうので警告がでた場合は何とか別の方法を探してしまっていますが・・
参考にさせていただきました。感謝しております。

お礼日時:2006/12/05 23:07

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