C - 为什么 fopen (文件名, "r" ) 之后 fp == NULL 为真?



我正在尝试读取 Ubuntu 中文件的行数。对于我的代码,我正在使用CodeBlocks。

这是我编写的代码。

int countlines()
{
  // count the number of lines in the file called filename
  FILE *fp = fopen("words", "r");
  int ch=0;
  int lines=0;
  if (fp == NULL){
    return 0;
  }
  lines++;
  while(!feof(fp))
  {
    ch = fgetc(fp);
    if(ch == 'n')
    {
        lines++;
    }
  }
  fclose(fp);
  return lines;
}

如果我调用 countlines((,返回值是 0,那是因为他检查 fp==NULL 是否为真,这是真的。

我将单词放在与主文件夹相同的文件夹中。可执行文件位于Projectfolder/bin/Debug中。

单词如下所示:

"albatros",
"olifant",
"kantklos",
"robijn",
"internet"

最终目标是用文件单词的单词填充数组,而不使用 #include"单词"。

检查工作目录的设置。它可能不是 pjt/bin/Debug。此外,请尝试指定文件的完整路径。

if (fp == NULL){
    return 0;
  }

fp 使用 NULL 进行检查,因为fopen返回指针,如果成功,它将是非 NULL,因此如果fp == NULL,则文件打开不成功。这就是为什么程序无法继续,只能返回的原因。

如论坛中所述,流指针在其中没有寻找的有效文件指针。对于文件的数据工程师行,请将值类型重新考虑为字符串或数字(不包括 (。据说当 feof 在文件流的末尾时,逻辑约束对整个文件进行布尔值,就像你的 while !feof...作为缓冲区立即返回 EOF。理论上,在您的代码中,您应该将 转换为等于 ch + 1 以推测行。

相关内容

最新更新