【问题标题】:Reading file when compiling编译时读取文件
【发布时间】:2014-04-19 17:31:29
【问题描述】:

我正在开发一个程序,但我无法理解。我有一个带参数的主函数:

int main(int argc, const char *argv[]){
    FILE *file;
    file=fopen(argv[1], "r");

    if( file == NULL )
    {
      perror("Error while opening the file.\n");
      exit(EXIT_FAILURE);
    }

如何阅读argv[1] 文件。当我编译它时,错误显示为无效参数。如何打开文件以便打印隐藏的内容?我正在使用代码块。

【问题讨论】:

  • 您缺少一些#include 指令,尤其是<stdio.h>
  • 在命令行上编译(例如,gcc -Wall -g yourprog.c -o prog-bin,如果你的 C 源文件是 yourprog.c)并向我们显示确切的错误消息。并且计算机在编译时不是在读取文件,而是在运行时。

标签: c main


【解决方案1】:

argv[1] 指的是用户在命令行传递的第一个参数。 argv[0] 指的是文件本身。因此,在您的情况下,程序将打开作为第一个参数传递的文件。

./myprogram myfilename.txt

此外,程序本身也存在一些问题。

    #include <stdio.h>  /* Library needed for input/output*/    
    #include <stdlib.h> /* needed for the exit calls*/

    int main(int argc, const char *argv[]){
        FILE *file;
        file=fopen(argv[1], "r");

        if( file == NULL )
        {
            perror("Error while opening the file.\n");
            exit(1);
        }

        return 0;
        }

这显然现在没有多大作用,但它会打开 argv1。 另外,我将 exit(EXIT_FAILURE) 更改为 exit(1)。它们大多是同义词,但 exit(1) 不需要编译器标志 (-std=c99)。 EXIT_FAILURE 被认为更便携 - EXIT_FAILURE vs exit(1)? - 但为了简单起见,我将其更改为 exit(1)。

【讨论】:

  • 谢谢。但我仍然不明白我应该如何打开文件。现在它被称为 main.c 并且它在代码块中的一个项目中。我可以从 cmd 运行它还是我又错过了什么?
  • 没问题。我认为您需要做的是转到 Projects -> Set Program Arguments,并将您想要的程序名称设置为 argv[1]。
  • 请注意:EXIT_FAILURE 不需要任何编译器标志——只需 #include &lt;stdlib.h&gt;。将-std=c99 添加到编译命令行只是告诉编译器警告不属于该标准的内容——不使用它会告诉编译器我们不关心是否符合特定标准,所以不要警告编译器识别为有效的任何内容,包括扩展。此外,EXIT_FAILURE 已在 C89 中定义,因此我不知道有任何一组标志会导致编译器对其使用发出警告。
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 2013-03-19
相关资源
最近更新 更多