Как получить правильное количество аргументов командной строки C ++? - PullRequest
0 голосов
/ 15 декабря 2010

Я запускаю свою программу с

int main (int argc, char *argv[]) {
    printf("%d \n", argc);

затем я скомпилировал в Ubuntu, используя g ++, и запустил программу, используя

./calc 2 3 4 + *

но программа выводит 17! Я также сделал printf с аргументами:

arg 0: ./calc 
arg 1: 2 
arg 2: 3 
arg 3: 4 
arg 4: + 
arg 5: 1.2.c 
arg 6: 1.3.c 
arg 7: 1.4.c 
arg 8: 2.1.c 
arg 9: 2.2.c 
arg 10: 2.3.c 
arg 11: 2.4.c 
arg 12: 3.2.c 
arg 13: 3.4.c 
arg 14: 4.1.c 
arg 15: a.out 
arg 16: calc 

но, очевидно, это не то, что я ожидаю. Как я могу это исправить?

Ответы [ 2 ]

21 голосов
/ 15 декабря 2010

Ваша оболочка оценивает *, чтобы обозначить все файлы в текущем каталоге. Вы должны экранировать звездочку, используя \*.

12 голосов
/ 15 декабря 2010

Оболочка linux интерпретируется * как список всех файлов в каталоге.Попробуйте экранировать его с помощью "\", например

./calc 2 3 4 + \*

или

./calc 2 3 4 + "*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...