c++: argv 包含一些空格

c++: argv contains some spaces

我只想将包含一些 space 的一个参数传递给我的函数 main。这是一个例子:

string param = "{\"abc\" \"de\"}"; // the string is {"abc" "de"}
boost::replace_all(param, "\"", "\\""); // now it becomes: {\"abc\" \"de\"}
boost::replace_all(param, " ", "\40");  // now it becomes: {\"abc\"\"de\"}

ShellExecute(GetDesktopWindow(), "open", "myMainTest.exe", param.c_str(), "", SW_SHOWNORMAL); // execute my function main in another project

//在myMainTest.exe

的函数main中
cout<<argv[1];

我得到了这个结果:

{"abc""de"}

意思是双引号可以,但是space不行。

恕我直言,这与 windows 处理其命令行的方式直接相关。参数通常按空格分隔,但双引号 (") 中的字符串在删除引号后作为单个参数处理。

但这与类 Unix shell 处理输入的方式相去甚远!没有简单直接的方法来转义引号本身。但是,由于您的报价是平衡的,因此它会起作用。这是您必须传递给 ShellExecute 的实际字符串:"{\"abc\" \"def\"}"。现在只剩下C++源码怎么写了:

string param = "\"{\\"abc\\" \\"def\\"}\"";
ShellExecute(GetDesktopWindow(), "open", "myMainTest.exe", param.c_str(), "", SW_SHOWNORMAL);

myMainTest.exe应该只看到一个参数:{"abc" "def"}