構造体に整数のデータを格納する方法を
教えて下さい。
「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関数の使い方が間違えていると思うのですが…
ご教授して頂けたら幸いです。
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を使う理由が見えません。
「空白区切りのテキストファイルから整数値を構造体に格納する」だけならコレで出来ます。
返事の方が
大変に遅れまして申し訳ありません。
お陰様で大変に参考になりました。
ただ、まだ上手く行きません。
また新しく質問させて頂きますので
もし宜しければご回答頂ければ幸いです。
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;
で十分でしょう?
返事の方が
大変に遅れまして申し訳ありません。
お陰様で大変に参考になりました。
ただ、まだ上手く行きません。
また新しく質問させて頂きますので
もし宜しければご回答頂ければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語でのfscanfについて
-
txtファイルの文字を配列に格納
-
【C言語】ファイルを読み込んで...
-
エラーがわかりません、、
-
C言語 連番データの読み込み
-
fgets( ) の返り値は何?
-
ファイルへの書込み処理が異常...
-
fgets関数の利用 c言語
-
C言語でファイル名を変数にした...
-
c言語 DFAのプログラム
-
数値のみ抽出(C言語)
-
ファイルの特定行の抽出
-
Cで文字列の分割
-
マイナスからプラスへ転じた時...
-
Enterキーを押されたら次の処理...
-
「指定されたキャストは有効で...
-
数字以外が入力されたらエラー...
-
C言語で簡単なパックマンゲーム...
-
比較回数と交換回数表示について
-
C言語での引数の省略方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
fgets( ) の返り値は何?
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
C言語でセグメンテーションエ...
-
エラーがわかりません、、
-
ガンマ変換 C言語でプログラ...
-
自己相関関数を求めるプログラ...
-
VisualStudioでのファイルの入...
-
同時にファイル読み込み 書き込み
-
c言語 ファイルから数字を読み...
-
大量の入力ファイルを扱うとき...
-
ファイルが読み込めない・・・
-
【C言語】ファイルを読み込んで...
-
a*(1-exp(-bx))+cの近似の方法
おすすめ情報