C++ c++;:argv包含一些空格

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

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

这意味着双引号是可以的,但空格不是。
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);