阅读由'|'分隔的单词的麻烦

时间:2013-05-09 03:46:26

标签: c

我尝试在文件中阅读以下3个字的行:

果|苹果|柠檬

char *type, *type2, *type3;

使用此:fscanf(file, "%[^|]|%[^|]|%s", type, type2, type3);

但是我遇到了段错误。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

您需要确保为结果分配一些空间。从您的示例中可以看出,type,type2和type3都是null。您需要将它们指向堆或堆栈上的某个存储,例如:

char type [64];

但是要注意缓冲区溢出。有关如何避免这种情况的建议,请参阅this other question

答案 1 :(得分:0)

fscanf()语句更改为此。它确实有效。但请确保file的类型为FILE*。否则,如果是字符串,则必须使用sscanf()

fscanf(file, "%[^|]%*c%[^|]%*c%s", type, type2, type3);

//sscanf(file, "%[^|]%*c%[^|]%*c%s", type, type2, type3);


//Demo for the sscanf() case


#include<stdio.h>

int main()
{
char *file="fruit|apple|lemon",type[10],type2[10],type3[10];

sscanf(file, "%[^|]%*c%[^|]%*c%s", type, type2, type3);
printf("%s,%s,%s",type,type2,type3);
}

输出 fruit,apple,lemon