int i = 0;
while (fscanf(fi, "%[^,],%[^,],%[^,],%[^,],%[^\n]\n", buf.first,
buf.second,
buf.third,
buf.fourth,
buf.fifth) == 5)
{
if (i == 0)
{
ptr->pid = atol(buf.first);
ptr->name = buf.second;
ptr->ram = atoi(buf.third);
ptr->size = atof(buf.fourth);
ptr->os = buf.fifth;
}
i++;
}
printf("%li %s %d %.2f %s\n", ptr->pid, ptr->name, ptr->ram, ptr->size, ptr->os);//test
无论如何扫描有问题,我用\ n替换了我的输入文件\ r \ n-s,但它仍然扫描错误的项目。当我在输入文件的每一行的末尾添加coma-s并替换" \ n"用",\ n"在扫描中,它显示第一个元素,但它不扫描其他元素。
无论谁解决问题,都应该得到一个cookie。
答案 0 :(得分:2)
扫描没有问题。问题在于你在循环中使用char *
的方式。
ptr->pid = atol(buf.first);
ptr->name = buf.second; // <-------1
ptr->ram = atoi(buf.third);
ptr->size = atof(buf.fourth);
ptr->os = buf.fifth; // <-------2
在您的输出中,您会看到整数或浮点数不会更改,并且与第一个条目相同但字符串已更改(输出为上次读取的值)。
因为当你指向指针而没有复制时,如注释1和2中所示。因此它指向的值会更改为输出。
因此使用strcpy
复制字符串而不是指向它们。