获取“的垃圾值”*&引用;ASCII码
我在做两个数的乘法。*运算符未被视为有效的ASCII值 main.c获取“的垃圾值”*&引用;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
#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
。如有疑问,请将数据放入文件中并从文件中读取。这样做的优点是,您不必重复键入相同的数据。您还可以使用数据文件设置自动测试。