0

ファイルから動的配列にレコードをロードしたいと考えています。次のコードがあります。

typedef struct my_data {
    char name[100];
}my_data;
struct my_data *data;

void load_data()
{
struct my_data *temp = NULL;
    int i = 0;
    FILE * in;
    if((in = fopen("data.txt","rt")) != NULL) {
    temp = malloc((i+1)*sizeof(my_data));
    while(!feof(in))
        {
            fscanf(in,"%s", &temp[i].name);
            i++;
            temp = realloc(temp,((i+1)*sizeof(my_data)));
        };
        fclose(in);
    data = temp;
    free(temp);

    for (i=0;i<sizeof(data);i++ )
        printf("%s\n",data[i].name);
    }

私は100以上のレコードを持っています。なぜ4つしか表示されないのですか?

4

3 に答える 3

3
sizeof(data)

上記のサイズは、システムで 4 バイトdataのタイプです。レコードの数を取得するには、メモリ (つまり、レコード)my_data *を割り当てた方法と同じロジックに従います。for ループの初期化式で0に再割り当てしi+1たことに注意してください。i

于 2013-09-21T14:35:13.817 に答える
0

data は単に へのポインターであるためstruct my_dataです。これは、sizeof(struct my_data *)どちらが等しいかを示しsizeof(void *)、ポインターのサイズを返します (システムによっては、これは 4 または 8 などです)。

C で配列の長さを取得するために使用することはできませんsizeof。独自の変数に長さを保存する必要があります。

于 2013-09-21T14:36:12.280 に答える