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)

上面给出了它的大小,在你的系统上datamy_data *4 个字节。i+1要获取记录数,请遵循与分配内存(即记录)相同的逻辑。请注意,您已在 for 循环初始化表达式中重新分配i0 。

于 2013-09-21T14:35:13.817 回答
0

sizeof(my_data) 等于 4,因为实际上该结构只包含一个指向 char 的指针。不是 100 个字符的字符串。

于 2013-09-21T14:44:28.723 回答
0

因为 data 只是一个指向struct my_data. 它等于sizeof(struct my_data *)which 等于sizeof(void *)并返回指针的大小(取决于您的系统,这是 4 或 8 或其他值)。

您不能使用sizeof在 C 中获取数组的长度。您需要将长度保存在您自己的变量中。

于 2013-09-21T14:36:12.280 回答