我有一个简单的 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 相同的方式解释参数。 我无法更改参数进入我的程序的方式
编辑 我将简化问题:
为了实现这一点,我必须对程序或编译器做些什么?
最佳答案
您必须用另一个反斜杠保护结尾的反斜杠,否则反斜杠将被视为后续双引号的转义字符。 看这个blog post雷蒙德·陈 (Raymond Chen) 解释了这种行为的理由。 以下是相关部分的引述:
- A string of backslashes not followed by a quotation mark has no special meaning.
- An even number of backslashes followed by a quotation mark is treated as pairs of protected backslashes, followed by a word terminator.
- An odd number of backslashes followed by a quotation mark is treated as pairs of protected backslashes, followed by a protected quotation mark.
关于c++ - 如何以与 VBScript 相同的方式解析命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266836/