argc永远不会超过2

时间:2014-02-23 12:53:13

标签: c++ argc

如果我在Visual Studio 2013下编译此代码

int main(int argc, char* argv[])
{
std::cout << "arg count: "<< argc << "/n";
}

然后运行它而没有其他参数(即&gt; program.exe),它输出

arg count: 1

使用1个参数(&gt; program.exe arg1)输出

arg count: 2

但这是奇怪的地方。如果我输入(&gt; program.exe arg1 arg2),则输出

arg count: 2
“arg count”应该是3,不应该吗?

与(&gt; program.exe arg1 arg2 arg3)输出

arg count: 2

在这种情况下它应该是4 ......

打印argv [3]因某种原因工作正常。

为什么会这样?

3 个答案:

答案 0 :(得分:2)

C ++标准的3.6.1部分定义了main及其参数的工作原理:

  

在后一种形式中,出于说明的目的,第一个函数参数是   名为 argc ,第二个函数参数名为 argv ,其中 argc 应为参数个数   从运行程序的环境传递给程序。如果 argc 非零,则这些参数   应在 argv [0] 中通过 argv [argc-1] 提供,作为指向null终止的初始字符的指针   多字节字符串(ntmbs s)(17.5.2.1.4.2)和 argv [0] 应该是指向a的初始字符的指针   表示用于调用程序或“”的名称的ntmbs。 argc 的值应为非负值。    argv [argc]的值应为0 。 [注意:建议任何其他(可选)参数   在argv之后添加。 - 后注]

这意味着使用符合标准的编译器,您应该能够访问argv[argc]。 使用n&gt;访问argv[n] argc虽然未定义。它可能会崩溃,但不一定。

你所经历的是奇怪的,因为显然这些论据是作为一个参数处理的。如果您完全按照规定提供参数,则不应发生这种情况。

您应该修复main的签名。该标准至少保证了这两个签名,其他任何东西都是实现定义的:

  

- ()返回int和

的函数      

- 返回int

的函数(int,指向char的指针)

由于您要访问参数,相应的签名为int main(int argc, char** argv)

答案 1 :(得分:1)

好的,事实证明,问题出现在一些我没有在这里包含的代码中。我的代码是:

if (argc = 2) { do some stuff }

应该是

if (argc == 2) { do some stuff }
我真的觉得很蠢:\

答案 2 :(得分:0)

我猜你要么输入

(&gt; program.exe“arg1 arg2”

(>program.exe arg1,arg2