分段故障C语言读一个简单的单词

时间:2012-11-27 21:53:28

标签: c gcc segmentation-fault feof

我正在使用CodeBlocks,GCC和使用C语言编写。我的代码如下:

char word[50];
FILE *fn;
fn = open("word.txt", "rb");
if(fn == NULL) perror("File not opened");
while(!feof(fn))
{
    fscanf(fn, "%s", word);
}

文本文件中只有一个单词(目前是“蝙蝠侠”)。我已尝试过此代码的各种版本,包括以下内容:

char* word;
char = malloc(50);
FILE *fn;
fn = open("word.txt", "rb");
if(fn == NULL) perror("File not opened");
while(!feof(fn))
{
    fscanf(fn, "%s", &word);
}

老实说,我不知道为什么(以及为什么这应该如此困难)但是CodeBlocks给我的错误是feof线上可怕的SIGSEV分段错误。当我没有执行while循环时,fscanf会抛出Segmentation错误。请帮忙!我不经常在C工作,我记得为什么现在。即便是最简单的事情也很难。提前致谢。

更新: 我实际上通过将打开的行更改为:

来使其工作(最重要的一个)
fn = fopen("C://Temp//word.txt", "rb");

如何使用相对路径?

2 个答案:

答案 0 :(得分:2)

更改

fn = open("word.txt", "rb");

fn = fopen("word.txt", "rb");

open返回int a FILE*feoffscanf期望FILE*不是int作为其第一个参数,这就是feof()的原因,如果删除它,fscanf()段错误。< / p>

正如其他人已经指出的那样,将fscanf(fn, "%s", &word)更改为fscanf(fn, "%s", word)

答案 1 :(得分:1)

假设word是char *(你的代码不清楚),这条指令会给你带来问题:

fscanf(fn, "%s", &word);

只需改变它:

fscanf(fn, "%s", word);

另外,我建议你使用fopen函数而不是open,因为fscanf使用fopen提供的描述符。