命令参数中与号 (&) C++奇怪的事情
C++ odd thing with ampersand (&) in command argument
我刚刚在这里发现了一些相当奇怪的东西。它浪费了我一天的大部分时间。
在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。引号改变了标记的顺序,类似于数学中的括号。
更新:
调试器确实从不同的进程传递变量。它知道这并不是指新命令。启动不调试更准确。您可以在调试器中将其称为错误。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用