我写了一个C程序,通过将表达式作为命令行参数传递来计算反向波兰表示法,但是当我传递*(用于乘法)时,它传递该文件夹中的所有文件名。传递*作为命令行参数
比如我通过这样的:
./rpn 10 20 30 + *
,当我打印所有参数的结果是,
10
20
30
+
gcd
gcd.c
gcd.c~
rpn
rpn.c
rpn.c~
swapmacro
swapmacro.c argc :12
我写了一个C程序,通过将表达式作为命令行参数传递来计算反向波兰表示法,但是当我传递*(用于乘法)时,它传递该文件夹中的所有文件名。传递*作为命令行参数
比如我通过这样的:
./rpn 10 20 30 + *
,当我打印所有参数的结果是,
10
20
30
+
gcd
gcd.c
gcd.c~
rpn
rpn.c
rpn.c~
swapmacro
swapmacro.c argc :12
你需要躲避*
例如引述它像"*"
或逃避它像\*
的*
扩张是由椰壳(启动程序前)。阅读例如Advanced Bash Scripting guide。
这不是C问题。您正在使用Bash(或其他等效的shell),其中*
会自动展开(在它到达您的程序附近之前)。你需要做这样的事情:
./rpn 10 20 30 + "*"
工作,谢谢。但有什么我可以做的,以阻止它,我运行的Ubuntu终端如何知道它会扩大或不是在特定的环境? –
@ParagJain是阅读巴西尔的答案,以避免它。 –
你用什么程序将'*'传递给你的程序?这听起来像你只是不知道如何使用你用来启动C程序的任何程序。 –
我使用的是Ubuntu 12.04终端来运行我的程序,那是你在问什么? –
它被称为**文件名扩展**:让我们试试这个代码'为我in *;做$ echo $ i;完成;'在您的shell –