2014-12-20 23 views
0

我想读取Ubuntu中文件的行数。对于我的代码,我使用的是CodeBlocks。C - 为什么在fopen(filename,“r”)之后fp == NULL是true?

这是我所做的代码。

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“字”。

+2

可能是文件未找到,可能是您没有读取权限,请使用[stat]检查问题(http://man7.org/linux/man-pages/man2/stat.2。 HTML)。 –

+0

这就是为什么你应该说; if(fp == NULL){perror(“Ups”);返回-1; }'('perror'给你一个理由,而'-1'或者其他负值是OK方式来调用函数调用失败。) – Morpfh

+0

它的话。我有权限阅读文件 – Jasper

回答

1

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

+0

来打开项目,我不得不按照下一步在我的终端。 \ n cd Documents/Projects/OS/OS4/bin/Debug \ n ./OS4&n telnet localhost 1066 – Jasper

+0

@Jasper,它看起来像代码块中的工作目录是工程文件的路径。你可以改变它。转到**“项目 - >属性 - >构建目标 - > [目标名称] - >执行工作目录”**并将其设置为.../bin/Debug –

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

FP与NULL检查,因为,fopen返回指向,如果成功,这将是一个非空的,所以如果fp == NULL,然后打开文件不会成功。这就是为什么程序无法继续,只是返回。

相关问题