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运行当然,您还需要修复其他注释中提到的问题。