在c中打开文件的错误

时间:2015-02-19 20:35:08

标签: c linux file-io

目前我在尝试打开文件时遇到以下功能问题,无论我给它什么功能都无法打开文件。我目前正在传递" ./ input.txt"这是与可执行文件位于同一目录中的文件。您可以看到的代码是否有任何明显错误?

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;
}

2 个答案:

答案 0 :(得分:1)

我编译了代码。它工作正常。仔细检查文件是否存在于您认为存在的位置。如果存在,请确保文件权限允许运行程序的用户读取该文件。

[user@localhost]$ vim test.c
[user@localhost]$ gcc test.c -o test
[user@localhost]$ ./test
./input.txt
Error opening input file: No such file or directory
[user@localhost]$ touch ./input.txt
[user@localhost]$ ./test
./input.txt
[user@localhost]$ 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");
}
[user@localhost]$ ls -la ./input.txt
-rw-rw-r--. 1 user user 0 Feb 19 15:37 ./input.txt

答案 1 :(得分:-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");              
    }
}