プロが教えるわが家の防犯対策術!

構造体に整数のデータを格納する方法を
教えて下さい。

「ex」ファイルのデータ
41 4352
42 2341
43 5411
---------
これらのデータを
kihokyu[1].tosi=41
kihokyu[1].kan=4352
kihokyu[2].tosi=42
kihokyu[2].kan=2341
という感じで格納したいのです。


プログラム
構造体のテンプレートを宣言
typedef struct nentbl_ {
int tosi;
int kan;
} nentbl;


int main(void){

char buff[16];
FILE *fp;
int age , kyoku , i, y;

構造体を宣言
nentbl kihokyu[50];

ファイルを開く
fp = fopen("ex.fil","rb");





while(fgets(buff,sizeof buff,fp) != NULL){

    整数に変換
y = atoi(buff);

ここでエラー
memcpy(&kihokyu[i].tosi,y,4);
パラメータ '__src' は const void * 型として定義されているので
int は渡せない(関数 main )


たぶんmemcpy関数の使い方が間違えていると思うのですが…
ご教授して頂けたら幸いです。

A 回答 (3件)

char szBuf[256];


FILE *fp;
nentbl tKihokyu[50];

fp = fopen("ex.fil","r");
if(fp == NULL) {
 // ファイルオープンエラー
 return 0;
}
i = 0;
while(fgets(szBuf, 256, fp) != NULL) {
 if(i == 50) {
  // 配列オーバー
  break;
 }
 tKihokyu[i].tosi = atoi(strtok(szBuf, " \n"));
 tKihokyu[i].kan = atoi(strtok(NULL, " \n"));
 i++;
}
fclose(fp);


普通、配列の添え字は0からです。
態々memcpyを使う理由が見えません。
「空白区切りのテキストファイルから整数値を構造体に格納する」だけならコレで出来ます。
    • good
    • 0
この回答へのお礼

返事の方が
大変に遅れまして申し訳ありません。

お陰様で大変に参考になりました。

ただ、まだ上手く行きません。
また新しく質問させて頂きますので
もし宜しければご回答頂ければ幸いです。

お礼日時:2006/08/31 16:38

> memcpy(&kihokyu[i].tosi,y,4);


> パラメータ '__src' は const void * 型として定義されているので
memcpyの第2引数には(const void *)型、つまり何らかのポインタを渡します。
yはint型でポインタではないのでエラーがでます。
あと、第3引数のコピーサイズ指定ではsizeofを使用しましょう。

ただ、この部分はそもそもmemcpyを使う必要がある部分ではありません。
コピーしたいのはint型1つなのですから、
> kihokyu[i].tosi = y;
で十分でしょう?
    • good
    • 0
この回答へのお礼

返事の方が
大変に遅れまして申し訳ありません。

お陰様で大変に参考になりました。

ただ、まだ上手く行きません。
また新しく質問させて頂きますので
もし宜しければご回答頂ければ幸いです。

お礼日時:2006/08/31 16:39

そもそもmemcopyを使う必要がないと思いますが.


memcpy(&kihokyu[i].tosi,y,4);
じゃなくて
kihokyu[i].tosi=y
でいいでしょう.
    • good
    • 0
この回答へのお礼

返事の方が
大変に遅れまして申し訳ありません。

お陰様で大変に参考になりました。

ただ、まだ上手く行きません。
また新しく質問させて頂きますので
もし宜しければご回答頂ければ幸いです。

お礼日時:2006/08/31 16:39

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