为什么CommandLineToArgvW对其第一个参数的处理方式不同?
为什么以下几行不打印相同的内容为什么CommandLineToArgvW对其第一个参数的处理方式不同?,c,windows,winapi,command-line,C,Windows,Winapi,Command Line,为什么以下几行不打印相同的内容 #include <stdio.h> #include <shellapi.h> int main() { int n; fwprintf(stderr, L"%s\n", CommandLineToArgvW( L"\"C:\\\\\" b", &n)[0]); fwprintf(stderr, L"%s\n", CommandLineToArgvW(L"a \"C:\\\\\" b", &n)
#include <stdio.h>
#include <shellapi.h>
int main() {
int n;
fwprintf(stderr, L"%s\n", CommandLineToArgvW( L"\"C:\\\\\" b", &n)[0]);
fwprintf(stderr, L"%s\n", CommandLineToArgvW(L"a \"C:\\\\\" b", &n)[1]);
}
但是我认为它们应该打印相同数量的反斜杠。来自Microsoft参考:“
命令行到argvw
对反斜杠字符有一种特殊的解释,当它们后跟引号字符(“)。此解释假设前面的任何参数都是有效的文件系统路径,否则它的行为可能不可预测”(我的重点)。由于斜杠不是有效的文件系统路径,因此您可以从函数中预期不可预测的行为。将更具启示性,例如使用“\”(输出)因此,0(第一个)的命令行为argvwtoken使用另一个解析规则命令行的第一个字是程序名,程序名中的反斜杠是文字,而不是双倍的。@RaymondChen:谢谢!这是记录在某个地方还是我应该知道的东西?还有其他类似的怪癖吗?@Someprogrammerdude:我本来可以把它作为一个有效的路径,问题会解决的“我还在那儿。
C:\\
C:\