主函数接受一个包含空格的参数,该怎么处理

主函数接受一个包含空格的参数
我有两个project A和B。A通过相关的函数去运行B。B的主函数接受一个参数。

// project A
string param = "{\"abc\" \"de\"}":      // 这个是启动B会用到的参数,这个参数是:{"abc" "de"}
boost::replace_all(param, "\"", "\\\"");    // 把param里的所有双引号换成:\"
boost::replace_all(param, " ", "\\40");    // 把param里的所有空格换成:\40      40是空格的八进制

ShellExecute(GetDesktopWindow(), "open", "B.exe", param.c_str(), "", SW_SHOWNORMAL); // 运行project B 把param传递给B


// 在 project B的主函数中:

int main(int argc, char * argv[])
{
    cout<<argv[1];
}


我得到如下结果:{"abc"\40"de"}


我很费解:为什么引号可以从反斜杠引号转换成引号,但是空格不能从反斜杠40转换成空格???


PS:\40 和 \040 是一码事。
------解决思路----------------------
因为处理这个转义的不是 C++ ,而是操作系统的命令行处理程序。命令行处理程序不能处理类似 "\40" 转义。

如果希望在命令行参数传入空格,可以将参数用 “” 引起来。

像这样:
"{\"abc\" \"de\"}"