我有一个程序应该使用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的目录。这不是我第一次在命令行中使用文件的名称,但它是我第一次将参数作为参数传递给另一个函数。
答案 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