【问题标题】:How to open and for-loop over the lines of a file using argv argument from command-line (in C)?如何使用命令行中的 argv 参数(在 C 中)打开和循环遍历文件的行?
【发布时间】:2015-02-05 02:45:15
【问题描述】:

现在,我有一个 main 函数,看起来像(argv[2] 是我要循环遍历的文件,从命令行)

int main(int argc, char * argv[]) {
   FILE *thisfile;
   thisfile = fopen(argv[2], "r");
   while ....
}

我希望最终能够遍历文件 argv[1] 的每一行,并查看是否有任何行包含一个字符串,即 argv[1]。我知道像 fgets 这样的 C 操作,但我不知道如何使用它们。所以现在,输出文件的每一行就足够了,但是之后我想看看每一行是否包含一个字符串。我对 C 很陌生,感谢任何帮助!

【问题讨论】:

  • 先尝试一下。
  • 您使用while 循环而不是for 循环来执行此操作。
  • 网络上肯定有数百个教程展示了如何循环读取文件。 SO 不是辅导服务。
  • 为什么你认为文件名来自 argv 很重要?无论您从何处获得名称,您都以相同的方式读取文件。
  • 我查看了有关堆栈溢出的多个其他问题,但它们并不是很有帮助。而且,它们都是伪代码,不是从 argv 读取的,这让人很困惑。除了从 argv 之外,我不知道如何获取文件名。还有remyabel,我确实尝试过,但没有成功,我不想发布无效的代码。

标签: c file for-loop


【解决方案1】:

第一个问题很简单,代码就像

#include <stdio.h>
#define MAXLINE 1024



int main(int argn, char *argv[])
{
    FILE *fp;
    char line[MAXLINE];
    fp = fopen(argv[2], "r");
    while(fgets(line, MAXLINE, fp) != NULL)
        printf("The line is:%s\n", line);
    return 0;
}

但是你的第二个问题(在一行中查找一个字符串)有很多答案,它是模式识别,如果你愿意,你可以google kmp。

【讨论】:

  • 非常感谢您的帮助。但是,你能告诉我“char line[MAXLINE]”这一行是做什么的吗?它只是制作一个大小为 1024 的 char 数组吗?我不明白 fgets 如何使用它作为参数。
  • fgets 是一个标准io的接口,你可以google一下。如果你是c的大一新生,你可以读一本关于c的书,他们中的大多数都会给你一个例子界面使用和工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2013-04-08
  • 2018-03-20
相关资源
最近更新 更多