realloc之后struct的大小无效

时间:2013-09-21 14:32:33

标签: c struct malloc sizeof realloc

我想将文件中的记录加载到动态数组中。我有以下代码:

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?

3 个答案:

答案 0 :(得分:3)

sizeof(data)

Above给出了data的大小,类型为my_data *,系统上有4个字节。要获取记录数,请遵循与分配内存的方式相同的逻辑(即i+1记录)。请注意,您已在for循环初始化表达式中将i重新指定为 0

答案 1 :(得分:0)

因为数据只是指向struct my_data的指针。它等于sizeof(struct my_data *)等于sizeof(void *)并返回指针的大小(取决于你的系统,这是4或8或其他东西)。

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

答案 2 :(得分:0)

sizeof(my_data)等于4,因为实际上struct只保存一个指向char的指针。不是一串100个字符。