2012-11-19 50 views
0

當我運行下面的代碼時,它在Linux中失敗,但沒有Windows的問題。 文件名是一樣的東西「的src /文件夾/文件」fopen在Linux中失敗,但在Windows中工作

char* loadProgSource(const char* filename, size_t* finalLength) 
{ 
    char* returnStr; 
    FILE* file = fopen(filename, "rb"); 
    if(file == NULL) return NULL; 

    fseek(file, 0, SEEK_END); 
    *finalLength = ftell(file); 
    fseek(file, 0, SEEK_SET); 

    returnStr = (char*) malloc(*finalLength+1); 

    if(fread(returnStr, sizeof(char), *finalLength, file) != *finalLength) { 
     fclose(file); 
     free(returnStr); 
     return NULL; 
    } 
    returnStr[*finalLength] = '\0'; 

    return returnStr; 
} 
+2

您是否可以提供運行輸出,因爲它可能是文件路徑,內存泄漏..等 –

+5

您是否知道「工作目錄」,「相對路徑」和「絕對路徑」等術語? –

+3

如果無法打開文件以獲得更多信息,則應打印出errno –

回答

0

不僅爲情況下的系統命令失敗調試使用perror()

你可能國防部的代碼如下所示:在調用fseek()ftell()fclose()

... 

if (file == NULL) 
{ 
    perror("fopen"); 
    return NULL; 
} 

... 

returnStr = malloc(*finalLength+1); /* note that casting 'malloc()' is not necessary and also not recommended uin C */ 
if (!returnStr) 
{ 
    perror("malloc"); 
    return NULL; 
} 

... 

if (fread(returnStr, sizeof(char), *finalLength, file) != *finalLength) 
{ 
    perror("fread"); 
    ... 

添加錯誤檢查留給讀者作爲練習。

相關問題