次のコードでは、バイナリ ファイルからデータを読み取り、それを動的配列に書き込もうとしています。
関数「getAnz」は、データセットの数を教えてくれるはずです。
関数「readRecs」では、バイナリ ファイルからデータを読み取り、動的配列 (zArr) に書き込みたいと考えています。
プログラムは、正しい数のデータセットを教えてくれます。うん。
ここでいくつか質問があります:
1. データを読み取って動的配列に書き込む方法の何が問題になっていますか?
2. main 関数から readRecs 関数に "zArr" を渡すにはどうすればよいですか?
3. ファイル内のデータセットの数を取得する別の簡単な方法はありますか?
ご協力いただきありがとうございます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct daten
{
char name[20];
int alter;
};
long getAnz(FILE *fp)
{
struct daten ptr;
long counter = 0;
while(fread(&ptr, sizeof(struct daten), 1, fp))
{
counter++;
}
fclose(fp);
return counter;
}
void foo(FILE *fp, struct daten *zArr[], long lAnz)
{
long i = 0;
for(i = 0;i < lAnz;i++)
{
if(i == 0)
{
zArr = malloc(sizeof(*zArr));
}
else
{
zArr = realloc(zArr,sizeof(*zArr)*(i+1));
}
}
fclose(fp);
}
int main(void)
{
struct daten *zArr;
long anz = 0, i = 0;
FILE *fp = fopen("daten.bin", "rb");
anz = getAnz(fp);
printf("%ld\n", anz);
foo(fp, &zArr, anz);
for(i = 0; i<anz; i++)
{
printf("%s\t", zArr[i].name);
printf("%d\n", zArr[i].alter);
}
return 0;
}