【发布时间】:2018-12-20 04:02:55
【问题描述】:
我需要以命令行形式通过我的程序传递两个文件
./your_executable inputfile.txt outputfile.txt
在我的示例中,我使用的是
gcc coursework.c CircleCode.txt CircleCode_tmp.txt
因此第二个文件不存在并在程序中打开。
int main(int argc, char **argv[])
{
FILE *orginalFile = fopen(*argv[1], "r");
FILE *newFile = fopen(*argv[2], "w");
if (orginalFile == NULL || newFile == NULL)
{
printf("Cannot open file");
exit(0);
}
}
Clang 中的错误:
error: no such file or directory: 'CircleCode_tmp.txt'
【问题讨论】:
-
您对参数
argv的声明不正确。您可以使用char **argv,也可以使用char *argv[];这些是等价的。另一方面,您的char **argv[]意味着不同的东西,它与实际参数不匹配。更正声明后,还要更正用途,每个用途都应该少一个间接级别。 -
您还应该在使用
argv[1]和argv[2]之前检查if (argc < 3) { fputs ("error: insufficient input.\n", stderr); return 1; }。如果没有传递任何参数,argv[1]将是NULL和argv[2]一个不确定的地址。 -
呃...您正在将这些文件名传递给您的编译器。当您运行程序时,您希望它们作为程序本身的命令行参数。
-
你需要编译和运行两个不同的步骤。用 gcc -Wall coursework.c -o coursework 编译用 ./coursework CircleCode.txt CircleCode_tmp.txt 当然你还需要修复其他提到的问题厘米。
标签: c file-handling