Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取“的垃圾值”*&引用;ASCII码_C - Fatal编程技术网

获取“的垃圾值”*&引用;ASCII码

获取“的垃圾值”*&引用;ASCII码,c,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(arg

我在做两个数的乘法。*运算符未被视为有效的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])));
    }
样本输出:

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.

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

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

linux/mac上的任何标准shell都将进行文件替换,如果您不想这样做,则需要转义字符
*
,如

./basic 1 \* 2

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

linux/mac上的任何标准shell都将进行文件替换,如果您不想这样做,则需要转义字符
*
,如

./basic 1 \* 2

Windows上的echo*不一定与Windows上的情况有所不同,但对于Unix ish shell(如此处使用的shell)来说确实如此,它更喜欢使用简单的引号来避免shell替换
echo'*'
/basic 1'*'2
。如有疑问,请将数据放入文件中并从文件中读取。这样做的优点是,您不必重复键入相同的数据。您还可以使用数据文件设置自动测试。Windows上的
echo*
不一定与Windows上的情况不同,但对于Unix ish shell(如此处使用的shell)来说确实如此。更喜欢使用简单的引号来避免shell替换
echo'*'
/basic 1'*'2
。如有疑问,请将数据放入文件中并从文件中读取。这样做的优点是,您不必重复键入相同的数据。您还可以使用数据文件设置自动测试。