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

Passing in filename from command line to read file content

我有一个函数 ./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 中的每个字符存储在字符数组中。我不确定如何正确地这样做。执行程序代码后(将 hex 和 int 值从文件转换为 ASCII),我需要将转换后的 ASCII 文本保存到用户定义的输出文件中。

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

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

您正在尝试更改 main() 的原型,这是不正确的。根据C StandardSection 5.1.2.2.1 Program startup,要么就是

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

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

所以让它像

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

接下来,要从命令行使用 fopen() 打开文件,这个

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

是完全错误的,因为 FILE*fopen() returns 参数不是 char* 并且你提供给 fopen() 的参数也是错误的。然后阅读 fopen() 的手册页,它说

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 */  
}