C++ c++;:argv包含一些空格
我只想将一个包含空格的参数传递给我的函数main。下面是一个例子:C++ c++;:argv包含一些空格,c++,windows,parameters,space,argv,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\"d
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];
这意味着双引号是可以的,但空格不是。
IMHO,这与windows处理其命令行的方式直接相关。参数通常在空格上拆分,但双引号(
“
)中包含的字符串在删除引号后作为单个参数处理
但是它远远不像Unix那样的外壳处理输入,没有简单直接的方式来逃避引用本身。但是,随着你的引用平衡,它将工作。这里是你必须通过的实际字符串,你必须通过“代码> SeLetryEx> <代码>:{ ABC \”\“DEF\”} /<代码>。现在只剩下如何写C++源:
string param = "\"{\\\"abc\\\" \\\"def\\\"}\"";
ShellExecute(GetDesktopWindow(), "open", "myMainTest.exe", param.c_str(), "", SW_SHOWNORMAL);
和
myMainTest.exe
应该只看到一个参数:{“abc”“def”}
FYI如果使用(R”“
)则不需要转义引号。这不起作用吗?string param=“{\“abc de\”)";代码>祝贺你,因为它似乎有效。程序中的输出正是您传递给它的内容。那么你的问题到底是什么?你想通过别的考试吗?然后继续这样做。@Roddy不。如果我这样做,函数会将其视为两个参数。@Thomas。我不这么认为。读这里。一个技术要点是:不是Windows以这种方式处理命令行,而是链接到myMainTest.exe的C运行时库。如果愿意,您可以修改myMainTest.exe,以您喜欢的任何方式解析命令行。
string param = "\"{\\\"abc\\\" \\\"def\\\"}\"";
ShellExecute(GetDesktopWindow(), "open", "myMainTest.exe", param.c_str(), "", SW_SHOWNORMAL);