c - 从命令行传入文件名来读取文件内容

标签 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 文本保存到用户定义的输出文件中。

最佳答案

您尝试的代码存在一些问题,首先是这里

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

您正在尝试更改不正确的 main() 原型(prototype)。根据C Standard 第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()的参数 也错了。然后阅读 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 */  
}

关于c - 从命令行传入文件名来读取文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52350077/

相关文章:

c - 是否可以防止添加 BOM 以输出 UTF-8 文件? ( Visual Studio 2005)

ios - 使用 fopen() 在 .bundle 中打开文件

C文件读取循环总是中断

arrays - 从函数返回字符串时需要澄清

c++ - 识别 C 和 C++ 函数之间逻辑相似性的工具

python - 如何使用 argparse 读取命令行的剩余部分?

bash - 测试是否没有给出位置参数的惯用方法?

enums - 如何在 structopt 中使用枚举?

c - 我试图编写一个程序,看起来完全没问题,但我找不到它不起作用的原因,任何帮助将不胜感激

将字符从指针转换为整数 num