解析命令行参数argv中的双引号

shifind 2006-01-16 11:22:55
在main的参数argv中,对双引号的表述如下:
> 由双引号包围的字符串("字符串")被解释为单个参量,而不管其中是否包含空白。被引号括起的字符串可以嵌入参量中。
> 由反斜杠引导的一个双引号(\")被解释为一个文字双引号字符(")l 反斜杠被作为文字解释,除非它们后面紧跟一个双引号。
> 如果偶数个反斜杠后面跟随一个双引号,则为每对反斜杠放一个反斜杠到argv数组中,双引号被解释为一个字符串定界符。
> 如果奇数个反斜杠后面跟随一个双引号,为每对反斜杠放一个反斜杠到argv数组中,双引号则被剩下的反斜杠进行“转义”而使得一个文字双引号(")放入到argv中。

但有一点没有进行描述:如果只有一个双引号且在之前没有反斜杠。经过试验得知系统将此处理成另一个双引号在最后,即双引号后都被看作一个参数。好像在别处没见过这样的用法。哪位能解释一下?多谢!

相应的MSDN在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang98/html/_pluslang_parsing_c.2b2b_.command.2d.line_arguments.asp


...全文
1242 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf0403 2006-01-17
  • 打赏
  • 举报
回复
命令行参数在被程序读取之前会被 SHELL 处理
healer_kx 2006-01-16
  • 打赏
  • 举报
回复
这个时候,你读文件吧, 命令行参数传入文件名字...
逸学堂 2006-01-16
  • 打赏
  • 举报
回复
可能是约定组成,不是MS说了算的。

可能这就是从前的解析习惯,现在成了标准!

敢问:楼主,什么样叫做符号解析习惯?
shifind 2006-01-16
  • 打赏
  • 举报
回复
再重述一遍:
如果只有一个双引号且在之前没有反斜杠。经过试验得知系统将此处理成另一个双引号在最后,即双引号后都被看作一个参数。好像在别处没见过这样的用法。
例如:
test.exe a\"b cd
将被解析为两个参数:
a"b
cd
如果忘记反斜杠,test.exe a"b cd
它将被解析成一个参数:
ab cd
也就是说如果只有一个双引号且在之前没有反斜杠,系统将此处理成在最后加上另一个双引号。
这不符合解析习惯,如果非要这样做,微软至少应该在MSDN上有所表述。有谁在别处见过这种用法?
Bible_Chou 2006-01-16
  • 打赏
  • 举报
回复
不知道你究竟想干什么?
cnhgj 2006-01-16
  • 打赏
  • 举报
回复
如果你想传一个双引号作为参数,则双引号需要转义\"

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧