2013-07-17 270 views
1

我写了一个C程序,通过将表达式作为命令行参数传递来计算反向波兰表示法,但是当我传递*(用于乘法)时,它传递该文件夹中的所有文件名。传递*作为命令行参数

比如我通过这样的:

./rpn 10 20 30 + *

,当我打印所有参数的结果是,

10 
20 
30 
+ 
gcd 
gcd.c 
gcd.c~ 
rpn 
rpn.c 
rpn.c~ 
swapmacro 
swapmacro.c argc :12 
+0

你用什么程序将'*'传递给你的程序?这听起来像你只是不知道如何使用你用来启动C程序的任何程序。 –

+0

我使用的是Ubuntu 12.04终端来运行我的程序,那是你在问什么? –

+0

它被称为**文件名扩展**:让我们试试这个代码'为我in *;做$ echo $ i;完成;'在您的shell –

回答

2

你需要躲避*例如引述它像"*"或逃避它像\*

*扩张是由椰壳(启动程序前)。阅读例如Advanced Bash Scripting guide

3

这不是C问题。您正在使用Bash(或其他等效的shell),其中*会自动展开(在它到达您的程序附近之前)。你需要做这样的事情:

./rpn 10 20 30 + "*" 
+0

工作,谢谢。但有什么我可以做的,以阻止它,我运行的Ubuntu终端如何知道它会扩大或不是在特定的环境? –

+0

@ParagJain是阅读巴西尔的答案,以避免它。 –