我最近开始学习C ++,我对argv
和argc
感到有些困惑。我试图通过检查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 ++进行编译。
答案 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
。