我想只将包含一些空格的一个参数传递给我的函数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\"\40\"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"\40"de"}
这意味着双引号可以,但空格不是。
答案 0 :(得分:2)
恕我直言,这与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"}