例如,在命令行中这是有效的(第一个参数有引号,但第二个参数没有):“test.bat”“a”b即它知道“a”是第一个参数而b是第二个参数
但使用system()……
如果我们使用原始字符串文字,这将是最简单的。原始字符串文字是一种在c ++中写入字符串的方法,其中没有任何内容被转义。我们来看一个例子:
char const* myCommand = R"(test.bat "a" b)";
该 R 在开头表示它是一个原始的字符串文字,如果你打电话 system(myCommand) ,它将完全等同于打字
R
system(myCommand)
$ test.bat "a" b
进入命令行。现在,假设您要在命令行中转义引号:
$ test.bat \"a\" b
使用原始字符串文字,这很简单:
char const* myCommand = R"(test.bat \"a\" b)"; system(myCommand);
或者,或者:
system(R"(test.bat \"a\" b)");
希望这可以帮助!
的 关于原始字符串文字的更多信息: 强> 原始字符串文字 是一个很棒的功能,它们基本上允许您将任何文本复制+粘贴到您的程序中。他们一开始 R ,后跟引号和括号。只包含括号内的内容。例子:
using std::string; string a = R"(Hello)"; // a == "Hello"
以“raw”开头和结尾:
string b = R"raw(Hello)raw"; // b == "Hello"
以“foo”开头和结尾
string c = R"foo(Hello)foo"; // c == "Hello"
以“x”开头和结尾
string d = R"x(Hello)x"; // d == "Hello"
重要的是我们用相同的字母串(称为分隔符)开始和结束文字,然后是括号。这确保我们永远不会有理由在原始字符串文字中转义某些内容,因为我们总是可以更改分隔符,以便它不会在字符串中找到。
我找到了答案: system("test.bat" ""a"" b);
system("test.bat" ""a"" b);
或者更准确地说: system("\"test.bat\" ""a"" b");
system("\"test.bat\" ""a"" b");
所以答案是用双引号来逃避报价