为" *"获取垃圾值ASCII

时间:2014-04-22 19:28:23

标签: c

我正在做两个数字的乘法运算。 *运算符不被视为有效的ASCII值。

的main.c

  #include <stdio.h>

    extern int add();
    extern int mul();

    main(int argc, char *argv[])
    {
       char oper;
       oper = (char)argv[2][0];
            printf("\n argv: %d : %d : %d\n",atoi(argv[1]),atoi(argv[2]),atoi(argv[3]));

       if ( oper == '+' )
           printf ("%d\n", add(atoi(argv[1]), atoi(argv[3])));
       if ( oper == '*' )
           printf ("%d\n", mul(atoi(argv[1]), atoi(argv[3])));
    }

mul.c

int mul (int x, int y)
{
   int ans;
   ans = x * y;
   return (ans);
}

示例输出:

a@ubuntu:~/a/make$ ./basic 1 + 2

 argv: 1 : 0 : 2
 3 //=> gives the correct answer after addition
a@ubuntu:~/a/make$ ./basic 1 * 2

 argv: 1 : 0 : 0

 //Doesnt output any the answer.

为什么参数会得到垃圾值以及为什么不进行乘法。

1 个答案:

答案 0 :(得分:10)

问题是你的shell用你当前目录中的文件列表替换*

linux / mac上的任何标准shell都会进行文件替换,如果你不想要,你需要转义字符*?,比如

./basic 1 \* 2