- ベストアンサー
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関数の使い方が間違えていると思うのですが… ご教授して頂けたら幸いです。
- みんなの回答 (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を使う理由が見えません。 「空白区切りのテキストファイルから整数値を構造体に格納する」だけならコレで出来ます。
その他の回答 (2)
- Werner
- ベストアンサー率53% (395/735)
> memcpy(&kihokyu[i].tosi,y,4); > パラメータ '__src' は const void * 型として定義されているので memcpyの第2引数には(const void *)型、つまり何らかのポインタを渡します。 yはint型でポインタではないのでエラーがでます。 あと、第3引数のコピーサイズ指定ではsizeofを使用しましょう。 ただ、この部分はそもそもmemcpyを使う必要がある部分ではありません。 コピーしたいのはint型1つなのですから、 > kihokyu[i].tosi = y; で十分でしょう?
お礼
返事の方が 大変に遅れまして申し訳ありません。 お陰様で大変に参考になりました。 ただ、まだ上手く行きません。 また新しく質問させて頂きますので もし宜しければご回答頂ければ幸いです。
- a-saitoh
- ベストアンサー率30% (524/1722)
そもそもmemcopyを使う必要がないと思いますが. memcpy(&kihokyu[i].tosi,y,4); じゃなくて kihokyu[i].tosi=y でいいでしょう.
お礼
返事の方が 大変に遅れまして申し訳ありません。 お陰様で大変に参考になりました。 ただ、まだ上手く行きません。 また新しく質問させて頂きますので もし宜しければご回答頂ければ幸いです。
お礼
返事の方が 大変に遅れまして申し訳ありません。 お陰様で大変に参考になりました。 ただ、まだ上手く行きません。 また新しく質問させて頂きますので もし宜しければご回答頂ければ幸いです。