【问题标题】:How do I use a text file passed in as an argument from the command line in C?如何使用从 C 中的命令行作为参数传入的文本文件?
【发布时间】:2014-02-28 00:12:38
【问题描述】:

我很难弄清楚如何使用作为命令行参数传入的文本文件。我根本不知道将文件文本放入我的程序中以供使用。我的代码看起来像这样......

    char buffer[80];
    int i;
    int lineCount = 0;

    fgets(buffer, 80, stdin);  //get the first line

    while (buffer != NULL) {  
        // do some stuff
    }//end fgets while

这是一个家庭作业,我知道我的老师将使用以下命令运行程序:

    username@mylunixbox$ ./a.out <data1> output1

data1 是我要使用的文本文件。

【问题讨论】:

  • 输出1需要什么?

标签: c buffer command-line-arguments fgets


【解决方案1】:

使用 argv[1]。这将为您提供文件名,然后您可以使用 fopen() 并使用文件操作从文件中读取内容。

【讨论】:

  • Jonathan 在下面为您提供了完整的代码。我推荐的是同样的东西。
【解决方案2】:
int main(int argc, char **argv)
{
    int rc = EXIT_SUCCESS;
    for (int i = 1; i < argc; i++)
    {
        FILE *fp = fopen(argv[i], "r");
        if (fp == 0)
        {
            fprintf(stderr, "%s: failed to open file %s for reading\n",
                    argv[0], argv[i]);
            rc = EXIT_FAILURE;
        }
        else
        {
            char line[4096];
            while (fgets(line, sizeof(line), fp) != 0)
                ...do stuff with the line read from the file...
            fclose(fp);
        }
    }
    return rc;
}

【讨论】:

  • 非常感谢乔纳森!这很有帮助。
  • 请注意,如果没有命令行参数,许多命令会从标准输入读取(想想cat、sort,...)。如果这是您要使用的范例,则编写一个函数,该函数具有打开文件指针和文件名,并在确定文件已成功打开时调用它。如果没有给出参数,那么您可以使用stdin 和诸如"(standard input)" 之类的名称调用相同的函数,以获得与使用命令行参数相同的效果。如果一个参数是-(一个破折号),你会做同样的事情;这通常意味着“读取标准输入”)。
  • 通过您的命令行设计,您似乎想在命令行上指定输出文件。考虑 (a) 写入标准输出并让 shell 重定向到指定文件的优点; (b) 使用-o outputfile 选项指定输出。您将使用 getopt() 函数(或其 GNU 对应函数)来处理命令行选项;您可以搜索如何在 SO 上使用它。 (顺便说一句,调用fopen() 的函数通常应该是调用fclose() 的函数;您的服务函数读取到EOF。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2011-05-12
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
相关资源
最近更新 更多