我尝试在文件中阅读以下3个字的行:
果|苹果|柠檬
char *type, *type2, *type3;
使用此:fscanf(file, "%[^|]|%[^|]|%s", type, type2, type3);
但是我遇到了段错误。有人可以帮忙吗?
答案 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