c ++:argv包含一些空格

时间:2015-10-23 13:14:02

标签: c++ windows parameters space argv

我想只将包含一些空格的一个参数传递给我的函数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"}

这意味着双引号可以,但空格不是。

1 个答案:

答案 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"}