如何检查参数是否在C ++中传递

时间:2017-10-02 14:36:53

标签: c++ input g++ arguments main

我最近开始学习C ++,我对argvargc感到有些困惑。我试图通过检查argc的大小来确定参数是否传递给程序,但无论我传递给程序多少个参数(包括没有参数),它的大小始终为4

简单示例:

int main(int argc, char** argv)
{
    std::cout << sizeof(argc); //outputs 4 with 0 or any num of arguments
    std::cout << sizeof(argv); //outputs 8 with 0 or any num of arguments
}

我之前发现了同样的问题而且我为重复它而道歉,但我发现的那些页面上的答案与此处发生的事情相矛盾。

那么,为什么argc总是4,还有其他方法可以检查参数是否传递给main()吗?

如果相关,我使用g ++进行编译。

3 个答案:

答案 0 :(得分:7)

sizeof(argc)将永远是相同的值。 sizeof(variable_name)为您提供变量在内存中占用的大小。如果您想知道传递了多少参数,则需要评估变量包含的内容。例如

std::cout << argc - 1;

将显示参数的传递方式。需要- 1,因为第一个参数是程序的名称,所以我们不希望在参数计数中计算它。

答案 1 :(得分:3)

  

我试图通过检查argc

的大小来确定参数是否传递给程序

argc 参数的数量。 argc的大小是int对象的大小。

  

那么,为什么argc总是4

因为int对象的大小在您的系统上总是4个字节。

  

有没有其他方法可以检查参数是否传递给main()?

您可以检查而不是argc的大小:

std::cout << argc;

请注意,程序(通常)至少有一个参数:用于执行它的命令。

答案 2 :(得分:1)

sizeof编译时为您提供所包含类型的大小。

因此sizeof(argc)sizeof(int)sizeof(argc)sizeof(char**)。我希望你欣赏这完全独立于所传递的论点!

只需依赖C ++提供的内容:argc是传递的参数数量,包括程序名称。 argv中的元素数量与argc相同,附加的元素设置为nullptr