从命令行传递文件名以读取文件内容

时间:2018-09-16 00:56:09

标签: c command-line-arguments fopen argv argc

我有一个函数./transform,该函数需要为输入和输出文件采用两个命令行参数。

就像这样:./transform "inputfile" "outputfile"

然后,我尝试使用fopen读取文件,以将文件中的每个字符存储到字符数组char token[1024]中。输入文件中的字符总数始终为<= 1024。

我收到有关fopen的参数数量错误的错误。这是我要完成的工作的伪代码。

void main(FILE *inputFile, FILE *outputFile){
    char token[1024];
    token = fopen(&inputFile, "r");
}

是的,我知道我正在尝试将FILE值分配给Char值...我以这种方式编写它,以表明我想要存储在字符数组中的inputFile中的每个字符。我不确定如何正确执行操作。执行完程序代码(将文件中的十六进制和整数值转换为ASCII)之后,我需要将转换后的ASCII文本保存到用户定义的输出文件中。

1 个答案:

答案 0 :(得分:0)

您尝试过的代码几乎没有问题,首先在这里

void main(FILE *inputFile, FILE *outputFile){ }

您正在尝试更改main()的原型,这是不正确的。根据{{​​3}} 第5.1.2.2.1节程序启动,应该是

int main(void) { /* ... */ }

int main(int argc, char *argv[]) { /* ... */ }

所以让它像

int main(int argc, char *argv[]) {
    /*some_code */
}

接下来,要在命令行中使用fopen()打开文件,

token = fopen(&inputFile, "r");

完全错误,因为fopen()返回FILE*而不是char*的参数,而您提供给fopen()的参数也是错误的。然后阅读C Standard的手册页,上面写着

FILE *fopen(const char *path, const char *mode);

示例代码

int main(int argc, char *argv[]) {
  if( argc!= 3 ) { /*if user input is not correct, inform user */
     printf("./transform inputfile outputfile \n");
     return 0;
  }
  FILE *fp = fopen(argv[1],"r); 
  if(fp == NULL) {
     /* error handling */
     return 0;
  }
  /* do_stuff_with_fp */  
}
相关问题