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