2017-06-22 61 views
-1

當我在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://stackoverflow.com/help/on-topic),特別是「程序員常用的軟件工具」 –

回答

1

您可以使用MSYS2_ARG_CONV_EXCL環境變量來禁用此行爲。例如,嘗試運行:

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

太好了,解決了這個問題,謝謝。你有資源解釋這個環境變量的內容嗎? –

+0

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

+0

好的,我會自己搜索它,同時只記得名字:) –

相關問題