C-通过命令行将输入和输出文本文件传递给我的程序
我需要以命令行的形式通过我的程序传递两个文件C-通过命令行将输入和输出文本文件传递给我的程序,c,file-handling,C,File Handling,我需要以命令行的形式通过我的程序传递两个文件 ./your_executable inputfile.txt outputfile.txt int main(int argc, char *argv[]) int main(int argc, char **argv) 在我的示例中,我使用 gcc coursework.c Circl
./your_executable inputfile.txt outputfile.txt
int main(int argc, char *argv[])
int main(int argc, char **argv)
在我的示例中,我使用
gcc coursework.c CircleCode.txt CircleCode_tmp.txt
int main(int argc, char *argv[])
int main(int argc, char **argv)
因此,第二个文件不存在,并在程序中打开
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);
}
}
int main(int argc, char *argv[])
int main(int argc, char **argv)
叮当声中的错误:
int main(int argc, char *argv[])
int main(int argc, char **argv)
您的
main()
的签名不正确
int main(int argc, char *argv[])
int main(int argc, char **argv)
它可以把它改成
int main(int argc, char *argv[])
int main(int argc, char **argv)
或
int main(int argc, char *argv[])
int main(int argc, char **argv)
因为argv
指向一个字符串数组
int main(int argc, char *argv[])
int main(int argc, char **argv)
看
int main(int argc, char *argv[])
int main(int argc, char **argv)
由于您的程序需要输入和输出文件才能工作,因此应该检查是否接收到所需数量的参数
int main(int argc, char *argv[])
int main(int argc, char **argv)
argc
将具有参数的数量。由于用于运行程序本身的命令名与两个文件一起被视为参数,因此程序至少需要3个参数
int main(int argc, char *argv[])
int main(int argc, char **argv)
所以你可以这样做
int main(int argc, char *argv[])
int main(int argc, char **argv)
if(argc<3)
{
perror("Not enough arguments.");
return 1;
}
您要求编译器编译您的输入和输出文本文件,这可能不是您想要的
int main(int argc, char *argv[])
int main(int argc, char **argv)
相反,你可以这样做
int main(int argc, char *argv[])
int main(int argc, char **argv)
gcc -Wall coursework.c -o your_executable
编译程序,然后像
int main(int argc, char *argv[])
int main(int argc, char **argv)
./your_executable CircleCode.txt CircleCode_tmp.txt
gcc
的-Wall
选项用于启用一些警告,这些警告可以更好地帮助您发现和纠正错误
int main(int argc, char *argv[])
int main(int argc, char **argv)
请参见讨论。您的
main()
的签名不正确
int main(int argc, char *argv[])
int main(int argc, char **argv)
它可以把它改成
int main(int argc, char *argv[])
int main(int argc, char **argv)
或
int main(int argc, char *argv[])
int main(int argc, char **argv)
因为argv
指向一个字符串数组
int main(int argc, char *argv[])
int main(int argc, char **argv)
看
int main(int argc, char *argv[])
int main(int argc, char **argv)
由于您的程序需要输入和输出文件才能工作,因此应该检查是否接收到所需数量的参数
int main(int argc, char *argv[])
int main(int argc, char **argv)
argc
将具有参数的数量。由于用于运行程序本身的命令名与两个文件一起被视为参数,因此程序至少需要3个参数
int main(int argc, char *argv[])
int main(int argc, char **argv)
所以你可以这样做
int main(int argc, char *argv[])
int main(int argc, char **argv)
if(argc<3)
{
perror("Not enough arguments.");
return 1;
}
您要求编译器编译您的输入和输出文本文件,这可能不是您想要的
int main(int argc, char *argv[])
int main(int argc, char **argv)
相反,你可以这样做
int main(int argc, char *argv[])
int main(int argc, char **argv)
gcc -Wall coursework.c -o your_executable
编译程序,然后像
int main(int argc, char *argv[])
int main(int argc, char **argv)
./your_executable CircleCode.txt CircleCode_tmp.txt
gcc
的-Wall
选项用于启用一些警告,这些警告可以更好地帮助您发现和纠正错误
int main(int argc, char *argv[])
int main(int argc, char **argv)
请参阅讨论。argv类型为char**,不需要[]
int main(int argc, char *argv[])
int main(int argc, char **argv)
#include <stdio.h>
#include <stdlib.h>
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);
}
}
#包括
#包括
int main(int argc,字符**argv){
FILE*orginalFile=fopen(argv[1],“r”);
FILE*newFile=fopen(argv[2],“w”);
如果(orginalFile==NULL | | newFile==NULL){
printf(“无法打开文件”);
出口(0);
}
}
argv类型为char**,不需要[]
int main(int argc, char *argv[])
int main(int argc, char **argv)
#include <stdio.h>
#include <stdlib.h>
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);
}
}
#包括
#包括
int main(int argc,字符**argv){
FILE*orginalFile=fopen(argv[1],“r”);
FILE*newFile=fopen(argv[2],“w”);
如果(orginalFile==NULL | | newFile==NULL){
printf(“无法打开文件”);
出口(0);
}
}
您对参数argv的声明不正确。您可以使用char**argv
,也可以使用char*argv[]
;这些是等价的。另一方面,您的char**argv[]
表示不同的含义,它与实际参数不匹配。更正声明后,还要更正用法,每个用法都应该少一级间接寻址。还应该检查if(argc<3){fputs(“错误:输入不足。\n”,stderr);在使用argv[1]
和argv[2]
之前返回1;}
。如果没有传递任何参数,argv[1]
将是NULL
和argv[2]
一个不确定的地址。呃。。。您正在将这些文件名传递给编译器。您希望在运行程序时将它们作为程序本身的命令行参数。您需要编译并作为两个不同的步骤运行。使用gcc-Wall coursework.c-o coursework编译并使用./coursework CircleCode.txt CircleCode_tmp.txt运行当然,您还需要修复其他注释中提到的问题。您对参数argv
的声明不正确。您可以使用char**argv
,也可以使用char*argv[]
;这些是等价的。另一方面,您的char**argv[]
表示不同的含义,它与实际参数不匹配。更正声明后,还要更正用法,每个用法都应该少一级间接寻址。还应该检查if(argc<3){fputs(“错误:输入不足。\n”,stderr);在使用argv[1]
和argv[2]
之前返回1;}
。如果没有传递任何参数,argv[1]
将是NULL
和argv[2]
一个不确定的地址。呃。。。您正在将这些文件名传递给编译器。您希望在运行程序时将它们作为程序本身的命令行参数。您需要编译并作为两个不同的步骤运行。使用gcc-Wall coursework.c-o coursework编译并使用./coursework CircleCode.txt CircleCode_tmp.txt运行当然,您还需要修复其他注释中提到的问题。