微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

argv:消毒通配符

我正在做一个K&R C书中的例子,它要求你基本上build立一个rpn计算器,它通过命令行参数来input。 我的解决scheme基本上遍历给定的参数,并吐出答案,但我注意到了一些事情:

如果我给乘法字符(星号) '*'没有单引号,gcc认为是一个通配符input,所以我的input

$./rpn 5 10 *

给我一个输出

read 5 read 10 read rpn read rpn.c = 0

用单引号包裹星号可以解决问题

如何通过代理服务器环境获得非标准服务?

ALSA:防止扬声器不足的方法

关于标准信号的传送

在Ubuntu和OSX上编译和链接OpenSSL

重叠的I / O:一些function仍然缺失

$./rpn 5 10 '*' read 5 read 10 read * = 50

我的问题是有没有办法消毒input,以便我的程序不需要用单引号包裹星号,或者是由更基本的东西(例如Linux / POSIX / UNIX二进制执行和参数处理)引起的这种行为?

实现IValueConverter将string转换为图像

将printfredirect到pipe道C

Windows和Mac OS X IO的差异,2015年的性能调整?

为什么wait4()被waitpid()取代

AdjustwindowRect文档

在执行程序之前,shell正在扩展glob。 你引用glob不是因为GCC,而是因为shell。 如果你不想要这个行为,那么使用一个不尊重globs的shell。

给作为输入

$./rpn "5 10 *"

在""和程序中的所有参数,你会得到argv[1]下的所有参数,然后通过空间分离来解析该字符串。

通过这种方式,你需要以特殊的方式处理任何通配符/特殊字符。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐