2015-02-19 5 views
0

В настоящее время у меня возникают проблемы с функцией ниже, пытаясь открыть файл, независимо от того, что я ему даю, функция не может открыть файл. В настоящее время я перехожу к «./input.txt», который является файлом в том же каталоге, что и исполняемый файл. Есть ли что-то откровенно неправильное в коде, который вы, ребята, видите?Ошибки, открывающие файл в c

FILE* openInputFile(char* inputFileName) 
{ 
    FILE* ifp= NULL; 

    printf("%s\n", inputFileName); 
    ifp = fopen(inputFileName, "rb"); 

    if(ifp == NULL) 
    { 
     printf("Error opening input file.\n");    
    } 

    return ifp; 
} 
+0

Вы на окнах или в UNIX? – ojblass

+1

Нет; есть незначительные нитки, которые можно подобрать, но ничего серьезного, что я вижу. Ваша проблема может заключаться в том, что текущий каталог вашего процесса не является каталогом, который, по вашему мнению, является. Текущий каталог будет текущей директорией оболочки, которая запускает этот процесс, а не каталог, в котором находится код. Вы можете напечатать ошибку из 'errno' через' strerror() ', чтобы увидеть, что происходит не так, но это вероятно, просто говорит «нет такого файла или каталога». Вы можете использовать ['getcwd()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html), чтобы распечатать рабочий каталог. –

+2

@ojblass: теги говорят «Linux». –

ответ

-1

Вы возвращаете указатель на область памяти, хранящейся в стеке. Когда функция завершается, память освобождается, и вы указываете на нераспределенную память. Вы должны передать указатель в качестве параметра, чтобы вернуть имя файла:

void openInputFile(char* inputFileName, FILE* ifp) 
{ 
    FILE* ifp= NULL; 

    printf("%s\n", inputFileName); 
    ifp = fopen(inputFileName, "rb"); 

    if(ifp == NULL) 
    { 
     printf("Error opening input file.\n");    
    } 
} 
+0

Я считаю, что у вас есть дополнительное 'FILE * ifp' заявление внутри вашего метода. –

1

Я скомпилировал код. Он работает нормально. Двойная проверка файла существует там, где вы думаете, что он существует. Если он существует, убедитесь, что разрешения на файл позволяют пользователю запустить программу для чтения файла.

[[email protected]]$ vim test.c 
[[email protected]]$ gcc test.c -o test 
[[email protected]]$ ./test 
./input.txt 
Error opening input file: No such file or directory 
[[email protected]]$ touch ./input.txt 
[[email protected]]$ ./test 
./input.txt 
[[email protected]]$ cat test.c 
#include <stdio.h> 
#include <stdlib.h> 

FILE* openInputFile(char* inputFileName) 
{ 
    FILE* ifp= NULL; 

    printf("%s\n", inputFileName); 
    ifp = fopen(inputFileName, "rb"); 

    if(ifp == NULL) 
    { 
     perror("Error opening input file");    
    } 

    return ifp; 
} 

int main(int argc, char * arv[]){ 
    openInputFile("./input.txt"); 
} 
[[email protected]]$ ls -la ./input.txt 
-rw-rw-r--. 1 user user 0 Feb 19 15:37 ./input.txt 
+0

также будьте осторожны, если у вас нет проблемы с памятью в какой-либо другой части вашей программы. Вы можете установить часы на переменные в gcc. – ojblass

Смежные вопросы