C - 为什么在fopen(filename," r")之后fp == NULL为真?

时间:2014-12-20 15:26:28

标签: c file null fopen

我正在尝试读取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“words”。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

if (fp == NULL){
    return 0;
  }
使用NULL检查

fp,因为fopen返回指针,如果成功,则返回非NULL,因此如果fp == NULL,则文件打开不成功。这就是为什么程序无法继续,只是返回。