0

我正在使用 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);
}

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

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 会引发分段错误。请帮忙!我不经常使用 C 语言工作,现在我记得为什么了。即使是最简单的事情也可能如此困难。提前致谢。

更新:我实际上已经通过将开放行更改为:

fn = fopen("C://Temp//word.txt", "rb");

这如何与相对路径一起使用?

4

2 回答 2

2

改变

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

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

open返回一个int,它不是一个FILE*feoffscanf期望一个FILE*不是 int 作为它的第一个参数,这就是为什么feof()并且如果你删除它,fscanf()segfaults 的原因。

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

于 2012-11-27T22:10:26.417 回答
1

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

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

只需通过以下方式更改它:

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

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

于 2012-11-27T21:58:13.530 回答