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

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

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

在 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/

相关文章:

C++ builder 如何配置编译器只输出 exe?

c++ - 默认值的函数模​​板

c++ - 创建跨进程函数指针

c++ - JNI C++ 调试技术?

c - 机器指令中 exit(0) 时为 "Access violation reading"?

c++ - QOpenglWidget 和 QML Quick

ios - 如何调试自定义 cocoa pod 库?

asp.net - 如何将调试器附加到 IIS 而不是 ASP.NET 开发服务器?

visual-c++ - 编译代码中的冗余指令

c - 为什么这个添加被默默地忽略了?