我想将记录从文件加载到动态数组中。我有以下代码:
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 个字符的字符串。