Ошибка при передаче * в качестве аргумента оболочки в C - PullRequest
3 голосов
/ 26 июня 2010

Я работаю над небольшой программой, в которой я предоставляю аргументы командной строки

Например, ./a.out 2 3 4 + *

Когда приходит «*», вместо того, чтобы печатать сам «*», он печатает папки внутри каталога «+». Пожалуйста, дайте мне знать, как удалить эту ошибку. Я хочу напечатать «*» здесь.

#include <stdio.h>
int main(int argc, char *argv[])
{
   char *c;

   while(--argc > 0)
   {
      c = *++argv;
      if(strcmp(c,"+") == 0 )
      {
          printf("%s",c);
      }
      else if(strcmp(c,"-") == 0)
      {
          printf("%s",c);
      }
      else if(c[0] == '*')
      {
          printf("%s",c);
      }
   }
}

Ответы [ 2 ]

9 голосов
/ 26 июня 2010

Это не имеет ничего общего с вашим кодом, а скорее с вашей оболочкой.Если вы хотите, чтобы оболочка не закрывала символы подстановки, вам нужно их экранировать, либо с обратной косой чертой, либо с кавычками.

./foo \*
./bar '*'
4 голосов
/ 26 июня 2010

Ваша оболочка интерпретирует символ '*' как список всех файлов в текущем каталоге.Проблема не в вашей программе, а в том, как вы ее запускаете.

try:

. / A.out 2 3 4 + \ *

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