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"}
我只想将包含一些 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"}