我有一个函数./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/