
構造体に整数のデータを格納する方法を
教えて下さい。
「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ランキング
-
memcpyについて
-
バイナリ形式の読み込み
-
CSVファイルを読み込み構造体の...
-
C言語でクロマキー合成をする方法
-
C言語でセグメンテーションエ...
-
複数ファイルの同時読み込みの...
-
ファイルからCR/LFを除去したい
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
有効数字について 以前質問をし...
-
Fortran において変数の定義
-
C++の課題が分かりません。
-
Unicode でのWin32アプリのプロ...
-
.NET 小数点以下の切り捨てにつ...
-
c言語マップ探査ゲーム プログ...
-
2÷3などの余りについて
-
c++ 文字列を入力して、一文字...
-
C言語について
-
マイナスからプラスへ転じた時...
-
C言語をお願いします
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
ファイル出力で改行を入れたい!
-
fscanfでループしてしまう。
-
C言語にてXMLファイルから任意...
-
テキストファイル内に対して, ...
-
datファイルの読み込み
-
ファイルに行番号を追加
-
大量の入力ファイルを扱うとき...
-
辞書順にソートしたいのですが...
-
InternetReadFileを使ったファ...
-
C言語 連番データの読み込み
-
C言語におけるファイル読み込み...
-
数値のみ抽出(C言語)
-
簡易grep関数ができません。助...
-
VisualStudioでのファイルの入...
-
fgets( ) の返り値は何?
おすすめ情報