首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >argv:清除通配符

argv:清除通配符
EN

Stack Overflow用户
提问于 2014-11-24 05:50:09
回答 2查看 1.1K关注 0票数 9

我正在研究K&R C书中的一个例子,它要求您从本质上构建一个通过命令行参数输入的RPN计算器。我的解决方案本质上是迭代给定的参数并给出答案,但我注意到了一些事情:

如果我给乘法字符(星号) '*'没有单引号,gcc假设它是通配符输入,所以我的输入

代码语言:javascript
复制
$./rpn 5 10 *

给了我一个输出

代码语言:javascript
复制
read 5
read 10
read rpn
read rpn.c
= 0

用单引号包装星号可以解决这个问题。

代码语言:javascript
复制
$./rpn 5 10 '*'
read 5
read 10
read *
= 50

我的问题是,是否有一种方法可以对输入进行清理,使我的程序不需要将星号包装在单引号中,或者这种行为是由更基本的(例如Linux/POSIX/UNIX二进制执行和参数处理)引起的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 05:58:20

在执行程序之前,shell正在扩展glob。你引用这个词不是因为GCC,而是因为它的壳。如果您不想要这种行为,那么使用一个不遵守globs的shell。

票数 8
EN

Stack Overflow用户

发布于 2014-11-24 06:01:05

提供输入作为

代码语言:javascript
复制
$./rpn "5 10 *" 

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27098588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档