2013-07-17 3 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

Его имя ** имя файла Расширение **: позволяет попробовать этот код 'for i in *; do echo $ i; done;' на вашей оболочке –

ответ

2

Вам нужно бежать * например, цитируя его как "*" или избегая его, как \*

Расширение * выполняется оболочкой (перед началом вашей программы). Чтение, например. Advanced Bash Scripting guide.

3

Это не проблема с C. Вы используете Bash (или некоторую эквивалентную оболочку), где * автоматически расширяется (прежде чем он приближается к вашей программе). Вам нужно будет сделать что-то вроде этого:

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

Это работает, спасибо. Но есть ли что-то, что я могу сделать, чтобы остановить его, я запускаю терминал ubuntu, как я узнаю, что он будет расширяться или нет в конкретной среде? –

+0

@ParagJain да, прочитал ответ Базиле, чтобы его избежать. –

Смежные вопросы