用argv打开文件给我文件NULL

时间:2016-04-09 13:01:38

标签: c file argv

我有一个程序应该使用argc和argv从命令行获取文件的名称。打印argv [1]和argv [2]向我展示了我传递的确切名称,但是传递argv [1]和argv [2]作为参数来打开另一个函数中的文件只显示我输入的错误行,如果可以'打开文件。
我的主要:

int main(int argc, char* argv[])
{
    if (argc != 4) 
    {
        puts("Incorrect number of parameters.");
        return 1;
    }
    else
    {
    Image *a, *b;

    a = OpenFile(argv[1]);
    b = OenFile(argv[2]);

    } /* else */
    return 0;
} /* main */

OpenFile函数将返回一个填充了文件信息的结构。这是函数的第一部分:

Image *OpenFile(char* name)
{
    FILE* f = fopen(name, "r");
    Image* imagem;
    int temp, i, cont, data[MAX];
    char aux[2];

    if(f == NULL)      
    {
        puts("Error opening file.");
        return NULL;
    } /* if */
    ...
}

我传递了正确的名字,但收到了"错误打开文件。"我尝试打开的每个文件的行。

编辑:它给了我"没有这样的文件或目录",但我将文件复制到放置.exe的目录。这不是我第一次在命令行中使用文件的名称,但它是我第一次将参数作为参数传递给另一个函数。

1 个答案:

答案 0 :(得分:3)

来自fopen手册页:

RETURN VALUE
     

成功完成fopen()后,fdopen()和freopen()返回一个FILE指针。否则,返回NULL并且   errno设置为指示错误。

所以你可以改变:

 if(f == NULL)      
{
    puts("Error opening file.");
    return NULL;
} /* if */

使用:

 if(f == NULL)      
{
    perror("fopen");
    return NULL;
} /* if */

你会得到一个关于fopen失败原因的描述性信息。

您应该包含errno.h以使用perror