CMD 解析命令行參數(shù)規(guī)則
http://www.iseeker.org/blog/2008/01/31/解析命令行參數(shù)規(guī)則-parsing-c-command-line-arguments/
解析命令行參數(shù)規(guī)則 (Parsing C Command-Line Arguments)
Posted in January 31st, 2008
by 王永杰 in C&C++, 技術(shù)為本
這里說的解析命令行參數(shù),并不是說類似getopt的解析函數(shù),而是說win平臺的命令行參數(shù)是按什么規(guī)則傳入程序的。前兩天我寫了個命令行的程序,程序?qū)Ω夸浀奶幚砜偸怯袉栴}。經(jīng)過跟蹤,發(fā)現(xiàn)當(dāng)輸入?yún)?shù)是(”D:\”)的時候,實際程序讀到的參數(shù)是(D:”)。在路徑的兩端加上引號,是為了讓路徑名稱中出現(xiàn)空格的時候不會作為參數(shù)分隔符處理。可是顯然最后一個引號被\轉(zhuǎn)移為 ” 了。
求助于MSDN,終于找到了命令行解析的規(guī)則,原文鏈接:http://msdn2.microsoft.com/en-us/library/aa243471.aspx。這里我做一下翻譯:
參數(shù)用空格或者TAB進(jìn)行分割。
一個字符串若被兩個雙引號包含,則即使其中包含空格或TAB字符也會被視為一個參數(shù)。被引起來的字符串可以嵌入?yún)?shù)內(nèi)。
字符串中存在的雙引號可以通過前置反斜杠進(jìn)行轉(zhuǎn)義。
反斜杠會被解釋成單個字符,除非后面緊接著一個雙引號。
如果偶數(shù)個反斜杠后面跟隨一個雙引號,每對反斜杠放一個反斜杠到參數(shù)中,雙引號被解釋為一個字符串界定符。
如果奇數(shù)個反斜杠后面跟隨一個雙引號,每對反斜杠放一個反斜杠到argv數(shù)組中,雙引號則被剩下的反斜杠轉(zhuǎn)義放入到argv中,而不會作文字符串界定符。

解析命令行參數(shù)規(guī)則 (Parsing C Command-Line Arguments)
Posted in January 31st, 2008
by 王永杰 in C&C++, 技術(shù)為本
這里說的解析命令行參數(shù),并不是說類似getopt的解析函數(shù),而是說win平臺的命令行參數(shù)是按什么規(guī)則傳入程序的。前兩天我寫了個命令行的程序,程序?qū)Ω夸浀奶幚砜偸怯袉栴}。經(jīng)過跟蹤,發(fā)現(xiàn)當(dāng)輸入?yún)?shù)是(”D:\”)的時候,實際程序讀到的參數(shù)是(D:”)。在路徑的兩端加上引號,是為了讓路徑名稱中出現(xiàn)空格的時候不會作為參數(shù)分隔符處理。可是顯然最后一個引號被\轉(zhuǎn)移為 ” 了。
求助于MSDN,終于找到了命令行解析的規(guī)則,原文鏈接:http://msdn2.microsoft.com/en-us/library/aa243471.aspx。這里我做一下翻譯:
參數(shù)用空格或者TAB進(jìn)行分割。
一個字符串若被兩個雙引號包含,則即使其中包含空格或TAB字符也會被視為一個參數(shù)。被引起來的字符串可以嵌入?yún)?shù)內(nèi)。
字符串中存在的雙引號可以通過前置反斜杠進(jìn)行轉(zhuǎn)義。
反斜杠會被解釋成單個字符,除非后面緊接著一個雙引號。
如果偶數(shù)個反斜杠后面跟隨一個雙引號,每對反斜杠放一個反斜杠到參數(shù)中,雙引號被解釋為一個字符串界定符。
如果奇數(shù)個反斜杠后面跟隨一個雙引號,每對反斜杠放一個反斜杠到argv數(shù)組中,雙引號則被剩下的反斜杠轉(zhuǎn)義放入到argv中,而不會作文字符串界定符。
