• ベストアンサー

memcpyについて

構造体に整数のデータを格納する方法を 教えて下さい。 「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関数の使い方が間違えていると思うのですが… ご教授して頂けたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.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を使う理由が見えません。 「空白区切りのテキストファイルから整数値を構造体に格納する」だけならコレで出来ます。

niiza
質問者

お礼

返事の方が 大変に遅れまして申し訳ありません。 お陰様で大変に参考になりました。 ただ、まだ上手く行きません。 また新しく質問させて頂きますので もし宜しければご回答頂ければ幸いです。

その他の回答 (2)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.2

> memcpy(&kihokyu[i].tosi,y,4); > パラメータ '__src' は const void * 型として定義されているので memcpyの第2引数には(const void *)型、つまり何らかのポインタを渡します。 yはint型でポインタではないのでエラーがでます。 あと、第3引数のコピーサイズ指定ではsizeofを使用しましょう。 ただ、この部分はそもそもmemcpyを使う必要がある部分ではありません。 コピーしたいのはint型1つなのですから、 > kihokyu[i].tosi = y; で十分でしょう?

niiza
質問者

お礼

返事の方が 大変に遅れまして申し訳ありません。 お陰様で大変に参考になりました。 ただ、まだ上手く行きません。 また新しく質問させて頂きますので もし宜しければご回答頂ければ幸いです。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.1

そもそもmemcopyを使う必要がないと思いますが. memcpy(&kihokyu[i].tosi,y,4); じゃなくて kihokyu[i].tosi=y でいいでしょう.

niiza
質問者

お礼

返事の方が 大変に遅れまして申し訳ありません。 お陰様で大変に参考になりました。 ただ、まだ上手く行きません。 また新しく質問させて頂きますので もし宜しければご回答頂ければ幸いです。

関連するQ&A