命令参数中与号 (&) C++奇怪的事情

C++ odd thing with ampersand (&) in command argument

本文关键字:C++ 参数 命令      更新时间:2023-10-16

我刚刚在这里发现了一些相当奇怪的东西。它浪费了我一天的大部分时间。

在MSVC中,当传递给主程序的参数是abc&123时,如果使用"启动调试"选项运行程序,MSVC会将参数(argv[]之一)作为"abc&123"传递。但是,如果使用"启动而不调试"运行程序,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和OS中定义的机制,从回到MS-DOS。引号改变了标记的顺序,类似于数学中的括号。

更新:

调试器确实从不同的进程传递变量。它知道这并不是指新命令。启动不调试更准确。您可以在调试器中将其称为错误。