我试图在文件中读取以下 3 个单词的行:
水果|苹果|柠檬
char *type, *type2, *type3;
使用这个: fscanf(file, "%[^|]|%[^|]|%s", type, type2, type3);
但我遇到了段错误。有人可以帮忙吗?
我试图在文件中读取以下 3 个单词的行:
水果|苹果|柠檬
char *type, *type2, *type3;
使用这个: fscanf(file, "%[^|]|%[^|]|%s", type, type2, type3);
但我遇到了段错误。有人可以帮忙吗?
您需要确保为结果分配一些空间。从您的示例中可以看出,type、type2 和 type3 都为空。您需要将它们指向堆或堆栈上的一些存储,例如:
字符类型[64];
但是要小心这里的缓冲区溢出。有关如何避免这种情况的建议,请参阅this other question 。
将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