2012-11-19 51 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"); 
    ... 

添加错误检查留给读者作为练习。

相关问题