在C中传递*作为shell参数时出错

时间:2010-06-26 10:21:33

标签: c

我正在制作一个小程序,我提供命令行参数

  

例如./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 个答案:

答案 0 :(得分:9)

这与您的代码无关,而是与您的shell无关。如果你想要shell不是通配符通配符,那么你需要使用反斜杠或带引号来转义它们。

./foo \*
./bar '*'

答案 1 :(得分:4)

您的shell将'*'字符解释为当前目录中所有文件的列表。问题不在你的程序中,而在于你运行它的方式。

尝试:

./ a.out 2 3 4 + \ *