#include <stdio.h>
#include <stdlib.h>
struct account{
int accountId;
char *name;
double amount;
};
int main(int argc, char **argv)
{
FILE *file=fopen(argv[1],"r");
struct account *Ptr;
int i,j;
int size=0;
fscanf(file,"%d",&size);
if(size==0)
{
printf("Unable to open file");
return 0;
}
printf("%d",size);
Ptr=malloc(sizeof(struct account)*size);
for(i=0;i<size;i++)
{
fscanf(file,"%d%s%lfn",&(Ptr+i)->accountId,(Ptr+i)->name,&(Ptr+i)->amount);
}
for(j=0;j<size;j++)
{
printf("%d%s%lfn",((Ptr+j)->accountId),(Ptr+j)->name,((Ptr+j)->amount));
}
fclose(file);
free(Ptr);
return 0;
}
这用于读取输入文件22哈利23.458莎莉100.91
不知何故,代码在 for 循环期间读取前 2 个大小,第二个 2 个,但没有其他内容
您的代码具有未定义的行为,因为您正在将数据读入未初始化的指针:
fscanf(file,"%d%s%lfn",&(Ptr+i)->accountId,(Ptr+i)->name,&(Ptr+i)->amount);
// ^^^^
// This pointer is uninitialized ----------------------+
有三种方法可以解决此问题:
- 使
name
成为数组,而不是指针,例如char name[MAX_NAME]
或 - 在将数据读入数据之前,使用
malloc
为name
分配空间。 - 读入临时缓冲区,然后
malloc
确切的字符数。