代码之家  ›  专栏  ›  技术社区  ›  Jonathan

正在读取C中“<”后面的命令行参数

  •  6
  • Jonathan  · 技术社区  · 17 年前

    让我先说这和家庭作业有关。但是,这是任务中非常小且相对不重要的一部分。

    C程序通过命令行参数接收输入,但其形式必须为:

    $ ./program < input
    

    我将如何以字符串形式接收输入?每次我试图从argv中打印出第三个参数时,都会收到以下消息:

    输入:没有这样的文件或目录。

    10 回复  |  直到 17 年前
        1
  •  21
  •   Douglas Leeder    17 年前

    <是shell重定向-它是在程序之外处理的。您将看到发送到标准输入流的文件名“input”的内容。这是程序运行的一种常见方式,尽管它们通常也处理给定的文件名,例如。 sed .

    如果我不得不猜测,我会认为:

    input: No such file or directory.
    

    来自shell,因为它无法打开指定的文件:“input”。

    另一方面,如果你真的想要 < input 作为程序的参数,您可以转义或引用它们,这样shell就不会解释它们。(作为练习向左转义,供读者使用):-)。

        2
  •  10
  •   Pierre Bourdon    17 年前

    这个 ./program < input 语法是一种特殊的shell语法,表示“重定向名为 input 程序的标准输入。

    要读取输入,您的程序只需使用标准的输入读取函数,行 fgets 或 scanf .

        3
  •  5
  •   Chris Lutz    17 年前

    在尼克斯系统上,不会有 是 第三个元素 argv . 如果在几乎任何类似于Unix的shell上执行该命令,则类似于执行以下操作:

    cat input | ./program
    

    所以你的 ./program 中只有一个元素 阿尔加夫 但它是 stdin 是文件 input ,所以要读取您刚从中读取的文件 斯坦丁 .请注意,这是设计程序的一种完全有效的方法。如果没有给定文件,许多Unix程序都是从标准输入读取的,这样您就可以从其他程序(在本例中是从文件)输入数据。

        4
  •  3
  •   sepp2k    17 年前

    之后会发生什么 < 不是命令行参数。该文件的内容将由shell通过管道传输到您的程序中。

    您所需要做的就是从stdin中读取文件内容。

        5
  •  3
  •   Cat Plus Plus    17 年前

    您需要转义“<”,否则shell将解析它,程序将无法在命令行中接收它。

    如果您使用的是bash,那么:

    ./program '<' input
    

    或

    ./program \< input
    

    其他shell可能做得不同(例如,Windows的默认值, cmd.exe 使用 ^ 作为转义符,不是 \ )

        6
  •  0
  •   Chuck    17 年前

    这是一个unix shell。形式 someprogram < somefile 告诉someprogram使用somefile作为输入来运行。如果你想做些不同的事情 < 符号,您需要引用它。

        7
  •  0
  •   dave4420    17 年前

    这个 < 意味着程序将从命名文件(输入)中读取其标准输入(stdin)。所以只需从stdin中读取(使用 fgets , fread 等)。

        8
  •  0
  •   Kieveli    17 年前

    不要使用“<”。您希望命令行参数执行以下操作:

    美元/项目-Dflag Seven=Ixnay Fromdinger

    在应用程序中,尝试以下操作:

    int main( int argc, char **argv )
    {
       int i;
       for( i = 0 ; i < argc ; ++i )
          printf( "Arg %d = %s\n", i, argv[i] );
       return 0;
    }
    

    您会注意到第一个参数是可执行文件的名称(在索引0处),第二个参数(在索引1处)是“-dflag”

        9
  •  0
  •   karlphillip    17 年前

    实际上,这是一种非常常用的编程技巧。程序需要的数据存储在一个文件中,比如data.txt,然后使用shell上的“<”重定向到应用程序,如下所示: ./程序<data.txt

    所以,在源代码中,您需要做的是这样的事情:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(void)
    {
        string tmp;
        string full_content;
    
        while (cin >> tmp)
            full_content += " "+tmp;
    
        cout << full_content << endl;
    }
    

    …您将从文件中得到一个字符串(用空格分隔)上的所有数据。

    这是一种方法,我希望能有所帮助。 []

        10
  •  -2
  •   Ashwin    17 年前

    你可以通过阅读stdin获得它。