MSYS2:如何禁用路径名自动转换为驱动器号?

问题描述:

当我在MSYS2 shell中测试用mingw编译的C程序时,我遇到了一个问题:我编写了一个命令行解析器,它接受根据Windows约定(从/开始)的选项。如果我把我的计划是这样产生一个输出文件:MSYS2:如何禁用路径名自动转换为驱动器号?

./example.exe /o test 

什么argv[1]最终实际上是O:/。从运行CMD.EXE的控制台窗口进行测试时,它工作正常。这确实最小的程序演示行为:

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    if (argc > 1) 
    { 
     puts(argv[1]); 
    } 
    return 0; 
} 
$ ./example.exe /o 
O:/ 

所以我想这是MSYS2壳尝试是有益的和更换的东西,看起来像下面根一个字母的路径为驱动器盘符语法。有没有办法禁用这种行为?总是启动CMD.EXE进行测试有点麻烦。

+0

没有关系C.你尝试逃跑或蜱封闭/'“' – Olaf

+0

@Olaf MSYS2是一个开发环境为* * C和经验法则是一个* *语言标记几乎总是合适的!与关于'clang'或'Makefile'命令行参数的问题一样,用于构建一些C代码......当然,我尝试了*明显*这样的事情! –

+0

@Olaf和迁移投票也是错误的,请参阅[我可以在此处询问哪些主题](https://*.com/help/on-topic),特别是“程序员常用的软件工具” –

您可以使用MSYS2_ARG_CONV_EXCL环境变量来禁用此行为。例如,尝试运行:

MSYS2_ARG_CONV_EXCL=\* ./example.exe /o test 
+0

太好了,解决了这个问题,谢谢。你有资源解释这个环境变量的内容吗? –

+0

目前我找不到它,但它基本上是由一些分隔符分隔的参数前缀列表。 –

+0

好的,我会自己搜索它,同时只记得名字:) –