S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

CMD解析命令行参数规则

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

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理