0

我试图在文件中读取以下 3 个单词的行:

水果|苹果|柠檬

char *type, *type2, *type3;

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

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

4

2 回答 2

3

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

字符类型[64];

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

于 2013-05-09T04:02:35.543 回答
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

于 2013-05-09T04:09:43.970 回答