2013-07-17 216 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是閱讀巴西爾的答案,以避免它。 –