解析命令行参数而不指定参数C ++的数量

时间:2014-09-22 00:27:57

标签: c++ c++11

这可能比我做的要简单得多,但是我在解析没有给出size参数的命令行参数时遇到了麻烦(即我要求 int main(char * argv [ ])而不是使用 int main(int argc,char * argv []))。我想这实际上是一个两部分问题,但我想知道(1)你能运行一个程序如下所示的命令行参数吗?:

testProgram arg1 arg2 arg3

其中arg1,arg2和arg3将被放入argv [],而(2)如果可以的话,如何循环遍历每个参数以便您可以在程序中使用它们?

我知道这似乎很随意,但我想更好地理解命令行参数的工作原理以及如何正确使用它们。

感谢您的帮助和见解。

3 个答案:

答案 0 :(得分:3)

签名

int main(char* argv[])
我所知道的任何C ++编译器都不支持

。现在很少有人认可。但仍然。


签名

int main( int argc, char* argv[])

是标准的,适用于纯ASCII参数。

当它们被编码为UTF-8时,它也适用于Unix-land中的一般Unicode参数。

无论如何,它告诉你参数的数量。

答案 1 :(得分:1)

argc告诉你程序收到了多少参数。因此,argv[0]指的是程序本身的名称,argv[1]指向您在命令行上传递的第一个参数,argv[2]指向下一个参数,依此类推,直至argv[argc-1] ,这是最后一个。接下来是argv[argc],这是一个空指针。

因此,当您运行程序时,您不必指定参数的数量 - 您只需传递任意数量的参数即可。然后,库中的一些代码会通过,将您传递给各个参数的内容拆分,并告诉程序找到多少代码。

IOW,当你跑步时:

  

testProgram arg1 arg2 arg3

您的计划将会收到:

argv[0] = testProgram
argv[1] = arg1
argv[2] = arg2
argv[3] = arg3
argv[4] = null pointer
argc = 4

注意:argv[0]的确切内容可以变化 - 它可能正是您为调用命令键入的内容,或者它可能是命令的完整路径,或者它可能(特别是在古代系统)是一个空字符串。在大多数现代系统中,它通常包含类似文件名的内容。

答案 2 :(得分:0)

您可以忽略argc参数并处理argv[]元素,直到找到NULL的元素,因为argv数组被指定为具有哨兵元素NULL。我不确定问题的最终目的是什么。

#include <stdio.h>

int main(int argc, char** argv) 
{
    while (*argv) {
        puts(*argv);
        ++argv;
    }
    return 0;
}