Posted on 2010-01-30 21:22
S.l.e!ep.¢% 閱讀(1248)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
VC
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ù)為本
這里說(shuō)的解析命令行參數(shù),并不是說(shuō)類似getopt的解析函數(shù),而是說(shuō)win平臺(tái)的命令行參數(shù)是按什么規(guī)則傳入程序的。前兩天我寫(xiě)了個(gè)命令行的程序,程序?qū)Ω夸浀奶幚砜偸怯袉?wèn)題。經(jīng)過(guò)跟蹤,發(fā)現(xiàn)當(dāng)輸入?yún)?shù)是(”D:\”)的時(shí)候,實(shí)際程序讀到的參數(shù)是(D:”)。在路徑的兩端加上引號(hào),是為了讓路徑名稱中出現(xiàn)空格的時(shí)候不會(huì)作為參數(shù)分隔符處理。可是顯然最后一個(gè)引號(hào)被\轉(zhuǎn)移為 ” 了。
求助于MSDN,終于找到了命令行解析的規(guī)則,原文鏈接:
http://msdn2.microsoft.com/en-us/library/aa243471.aspx。這里我做一下翻譯:
參數(shù)用空格或者TAB進(jìn)行分割。
一個(gè)字符串若被兩個(gè)雙引號(hào)包含,則即使其中包含空格或TAB字符也會(huì)被視為一個(gè)參數(shù)。被引起來(lái)的字符串可以嵌入?yún)?shù)內(nèi)。
字符串中存在的雙引號(hào)可以通過(guò)前置反斜杠進(jìn)行轉(zhuǎn)義。
反斜杠會(huì)被解釋成單個(gè)字符,除非后面緊接著一個(gè)雙引號(hào)。
如果偶數(shù)個(gè)反斜杠后面跟隨一個(gè)雙引號(hào),每對(duì)反斜杠放一個(gè)反斜杠到參數(shù)中,雙引號(hào)被解釋為一個(gè)字符串界定符。
如果奇數(shù)個(gè)反斜杠后面跟隨一個(gè)雙引號(hào),每對(duì)反斜杠放一個(gè)反斜杠到argv數(shù)組中,雙引號(hào)則被剩下的反斜杠轉(zhuǎn)義放入到argv中,而不會(huì)作文字符串界定符。
