我刚刚在这里发现了一些很奇怪的东西。这浪费了我一天的大部分时间。
在 MSVC 中,当传递给主程序的参数是 abc&123 时,如果使用“开始调试”选项运行程序,MSVC 会将参数(argv[] 之一)传递为“abc&123”。但是如果使用“Start Without Debugging”运行程序,MSVC 将只传递“abc”并切断“&”之后的任何内容。这背后的原因是什么?
最佳答案
& 被解释为命令行中的新命令。您的代码没有问题。操作系统解释!
创建以下代码并测试!
#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 和操作系统中定义的机制,从回到 MS-DOS。引号改变标记的顺序,类似于数学中的括号。
更新:
调试器确实传递来自不同进程的变量。它知道 & 不是指新命令。不调试启动更准确。您可以在调试器中将其称为错误。
关于命令参数中带有&符号(&)的C++奇怪的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27997501/