我刚刚发现了一些比较奇怪的东西。它浪费了我一天中最好的一部分。
在MSVC中,当传递给主程序的参数是abc& 123时,如果使用“Start Debugging”选项运行程序,MSVC将传递参数(argv []之一)为“abc& 123” 。但如果使用“Start Without Debugging”启动程序,MSVC将只传递“abc”并切断“&”之后的任何内容。这背后的原因是什么?
答案 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;不是指新命令。无调试启动更准确。您可以在调试器中将其称为错误。