Posted on 2010-01-30 21:22
S.l.e!ep.¢% 閱讀(1248)
評論(0) 編輯 收藏 引用 所屬分類:
VC
CMD 解析命令行參數規則
http://www.iseeker.org/blog/2008/01/31/解析命令行參數規則-parsing-c-command-line-arguments/
解析命令行參數規則 (Parsing C Command-Line Arguments)
Posted in January 31st, 2008
by 王永杰 in C&C++, 技術為本
這里說的解析命令行參數,并不是說類似getopt的解析函數,而是說win平臺的命令行參數是按什么規則傳入程序的。前兩天我寫了個命令行的程序,程序對根目錄的處理總是有問題。經過跟蹤,發現當輸入參數是(”D:\”)的時候,實際程序讀到的參數是(D:”)。在路徑的兩端加上引號,是為了讓路徑名稱中出現空格的時候不會作為參數分隔符處理。可是顯然最后一個引號被\轉移為 ” 了。
求助于MSDN,終于找到了命令行解析的規則,原文鏈接:
http://msdn2.microsoft.com/en-us/library/aa243471.aspx。這里我做一下翻譯:
參數用空格或者TAB進行分割。
一個字符串若被兩個雙引號包含,則即使其中包含空格或TAB字符也會被視為一個參數。被引起來的字符串可以嵌入參數內。
字符串中存在的雙引號可以通過前置反斜杠進行轉義。
反斜杠會被解釋成單個字符,除非后面緊接著一個雙引號。
如果偶數個反斜杠后面跟隨一個雙引號,每對反斜杠放一個反斜杠到參數中,雙引號被解釋為一個字符串界定符。
如果奇數個反斜杠后面跟隨一個雙引號,每對反斜杠放一個反斜杠到argv數組中,雙引號則被剩下的反斜杠轉義放入到argv中,而不會作文字符串界定符。
