C ++与命令参数中的&符号(&)奇怪的东西

时间:2015-01-17 08:04:44

标签: c++ debugging visual-c++ arguments ampersand

我刚刚发现了一些比较奇怪的东西。它浪费了我一天中最好的一部分。

在MSVC中,当传递给主程序的参数是abc& 123时,如果使用“Start Debugging”选项运行程序,MSVC将传递参数(argv []之一)为“abc& 123” 。但如果使用“Start Without Debugging”启动程序,MSVC将只传递“abc”并切断“&”之后的任何内容。这背后的原因是什么?

1 个答案:

答案 0 :(得分:2)

&安培;被解释为命令行中的新命令。你的代码没有错。操作系统解释!

创建以下代码并进行测试!

#include <iostream>

using namespace std;

int main(int argc,char *argv[])
{
    for(int i=0;i<argc;i++)
        cout<<"arg "<<i<<": "<<argv[i]<<endl;
    return 0;
}

在命令行中测试以下内容:

appname aaa& bbb

appname "aaa& bbb"

第一行被解释为两个单独的命令:

appname aaa
bbb

而第二个只有一个命令:

appname "aaa& bbb"

这是shell和OS中从back到MS-DOS定义的机制。引号改变了令牌的顺序,类似于数学中的括号。

<强>更新

调试器确实传递了来自不同进程的变量。它知道&amp;不是指新命令。无调试启动更准确。您可以在调试器中将其称为错误。