fscanf只扫描我文件的第一个值

时间:2015-02-05 02:37:42

标签: c

#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%lf\n",&(Ptr+i)->accountId,(Ptr+i)->name,&(Ptr+i)->amount);
}

for(j=0;j<size;j++)
{
    printf("%d%s%lf\n",((Ptr+j)->accountId),(Ptr+j)->name,((Ptr+j)->amount));
}

fclose(file);
free(Ptr);

return 0;

}

这用于读入输入文件 2 2哈利23.45 8莎莉100.91

不知何故,代码读取前2个中的大小,第二个2读取for循环,但没有别的

1 个答案:

答案 0 :(得分:1)

您的代码具有未定义的行为,因为您正在将数据读入未初始化的指针:

fscanf(file,"%d%s%lf\n",&(Ptr+i)->accountId,(Ptr+i)->name,&(Ptr+i)->amount);
//                                                   ^^^^
// This pointer is uninitialized ----------------------+

有三种方法可以解决这个问题:

  • 使name成为数组,而不是指针,例如char name[MAX_NAME]
  • 在向其中读取数据之前,使用malloc将空间分配给name
  • 读入临时缓冲区,然后malloc确切的字符数。