我有一个简单的C ++程序,列出了它得到的参数:
#include <iostream>
int main(int argc, char* argv[]) {
for (int i = 1; i < argc; i++) {
std::cout << argv[i] << std::endl;
}
return 0;
}
我只是在测试/说明这一点,但最终目的是要接受某些文件和目录的名称。
因此,我将这些参数传递给它:
"\\server\directory\file.ext" "C:\trailing\backslash\" "file.txt"
但这是打印的内容:
\\server\directory\file.ext
C:\trailing\backslash" file.txt
即第二个参数后面的斜杠使它认为右引号已被转义。
我在VS2017的属性页中设置参数,但在以下情况下得到相同的输出:
我从PowerShell调用exe。
我允许外部工具通过我的
它已经建立的exe参数(这最终将是这样的)
用过的)。
如何使程序理解加斜杠的引号路径是一个参数?
编辑
this article的第4节准确描述了我的问题。基本上,我想让我的C ++程序以与批处理文件或VBScript相同的方式解释参数。我无法更改参数进入程序的方式
编辑我将简化问题:
上面的C ++程序的行为如下:
我希望它的行为如下:
为了做到这一点,我必须对程序或编译器做什么?
最佳答案
您必须使用另一个反斜杠来保护结尾的反斜杠,否则反斜杠将被视为以下双引号的转义字符。
有关此行为的原理,请参阅Raymond Chen的blog post。
这是相关部分的报价:
一串不带引号的反斜杠没有特殊含义。
偶数个反斜杠后跟一个引号被视为受保护的反斜杠对,后跟一个单词终止符。
奇数个反斜杠后跟引号被视为成对的保护反斜杠,后跟一个受保护的引号。