主函数接受一个包含空格的参数,该怎么处理
主函数接受一个包含空格的参数
我有两个project A和B。A通过相关的函数去运行B。B的主函数接受一个参数。
我得到如下结果:{"abc"\40"de"}
我很费解:为什么引号可以从反斜杠引号转换成引号,但是空格不能从反斜杠40转换成空格???
PS:\40 和 \040 是一码事。
------解决思路----------------------
因为处理这个转义的不是 C++ ,而是操作系统的命令行处理程序。命令行处理程序不能处理类似 "\40" 转义。
如果希望在命令行参数传入空格,可以将参数用 “” 引起来。
像这样:
"{\"abc\" \"de\"}"
我有两个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\"}"