2014-12-20 38 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,然後打開文件不會成功。這就是爲什麼程序無法繼續,只是返回。

相關問題