Posted on 2010-01-30 21:22
S.l.e!ep.¢% 阅读(1240)
评论(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中,而不会作文字符串界定符。