Использование * в строке сравнения? - PullRequest
1 голос
/ 08 февраля 2020

У меня возникают проблемы при использовании "*" при сравнении строк в моей программе C. Есть ли какое-то правило, запрещающее его использование? Вот неприятный кусок кода:

else if(strcmp(argv[i], "*") == 0)
{
    printf("pos MULT: %d", pos);
    result = dubStack[pos-1] * dubStack[pos - 2];
    pos += 1;
}

При запуске программы с кодом выше мой оператор печати не запускается и результат не вычисляется. Однако, если я изменю символ в строке сравнения (например, как показано ниже; изменил * на m), будет выполнена правильная операция, и оператор print сработает. Что-то мне не хватает при использовании * для этого?

else if(strcmp(argv[i], "m") == 0)
{
    printf("pos MULT: %d", pos);
    result = dubStack[pos-1] * dubStack[pos - 2];
    pos += 1;
}

1 Ответ

2 голосов
/ 08 февраля 2020

Нет ничего особенного в * в C строках: "*" - это безобидная символьная строка длиной 1.

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

$ myprog 1 1 \*
$ myprog 1 1 '*'
$ myprog 1 1 "*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...