我正在做一个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]下的所有参数,然后通过空间分离来解析该字符串。
通过这种方式,你需要以特殊的方式处理任何通配符/特殊字符。