如何以这种格式用 C 读取文件 ./filec <input.in> <output.myout>

How to read files in C, in this format ./filec <input.in> <output.myout>

我目前正在做一个使用输入文件的项目。 代码正在做我想做的一切,它完全正确,问题是我读取文件的方式。

FILE *fp;
fp = fopen (argv[1], "r");

我在终端中使用 ./filec input.in,所有内容都在终端中正确打印,但我必须以这种方式打开文件: ./filec < input.in > < output.myout > 我不确定那意味着什么。

谢谢,抱歉英语不好

您可能误解了 --help 选项,您描述的第一个符号对于命令行参数是正确的。 ""只是一个使用的符号,意思是您可以更改<>之间的部分名称。

无论如何,如果您确实需要使用该表示法来调用您的程序,您可以创建一个包含 argv[1] 且不带 <> 的新数组。

伪代码:

char newFilename[20];

//skip first and last character (if needed, changes values to skip first two and last two chars
for(i = 1; i < argv[1].length - 2; i++){
    newFilename[i - 1] = argv[1][i];
}

fp = fopen (newFilename, "r");

注意 < 和 > 字符被解释为文件重定向操作,所以你应该这样做(在这种情况下)./youprogram "< file.in >" "< file.out >"

我假设你打错了,你的意思是:

 ./filec < input.in > output.myout

基本上,这意味着您让 shell 为您完成所有工作,您的代码可以简单地从标准输入读取并写入标准输出。你可以试试:

fp = argc > 1 ? fopen(argv[1], "r") : stdin;

首先,了解 fopen(3) and stdio(3)

您想阅读 stdin

当调用 fopen 时,您 总是 应该检查失败,例如(在测试 argc>1 之后,假设您按照常规定义了 int main(int argc, char**argv)!)

 FILE *fp = fopen (argv[1], "r");
 if (!fp) {perror(argv[1]); exit(EXIT_FAILURE); };

所以你可能想要:

 FILE *fp = NULL; // I prefer always initializing variables
 if (argc>1) {
   fp = fopen (argv[1], "r");
   if (!fp) {perror(argv[1]); exit(EXIT_FAILURE); };
 }
 else fp = stdin;

如果您以 ./myprog < someinput.txt > someoutput.txt 调用您的程序,那么您 printfputchar 或发送到 stdout 的所有内容都会进入 someoutput.txt,并且 stdinsomeinput.txt。通常重定向是在外部完成的(通过 POSIX 系统上的 shell)

您的 argv[1] 将拥有输入文件,而您的 argv[2] 将拥有 output 文件。

您可以使用的基本开始布局是:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
    if (argc != 3)
    {
        exit(EXIT_FAILURE); //If there are not three arg, terminate the program.
    }
    FILE *fp_read, *fp_write;
    fp_read = fopen(argv[1],"r");
    fp_write = fopen(argv[2],"w");
    //Do whatever you want with it.
    fclose(fp_read);
    fclose(fp_write);
    return 0;
}