C - 重新分配后结构的大小无效



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

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("%sn",data[i].name);
    }

我有 100 多条记录。为什么它只显示 4?

sizeof(data)

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新