我有一个简单的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 ++程序的行为如下:
c&#43;&#43; - 如何以与VBScript相同的方式解析命令行-LMLPHP

我希望它的行为如下:
c&#43;&#43; - 如何以与VBScript相同的方式解析命令行-LMLPHP

为了做到这一点,我必须对程序或编译器做什么?

最佳答案

您必须使用另一个反斜杠来保护结尾的反斜杠,否则反斜杠将被视为以下双引号的转义字符。
有关此行为的原理,请参阅Raymond Chen的blog post
这是相关部分的报价:


  
  一串不带引号的反斜杠没有特殊含义。
  偶数个反斜杠后跟一个引号被视为受保护的反斜杠对,后跟一个单词终止符。
  奇数个反斜杠后跟引号被视为成对的保护反斜杠,后跟一个受保护的引号。

09-06 21:11