我正在做两个数字的乘法运算。 *运算符不被视为有效的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.
为什么参数会得到垃圾值以及为什么不进行乘法。
答案 0 :(得分:10)
问题是你的shell用你当前目录中的文件列表替换*
。
linux / mac上的任何标准shell都会进行文件替换,如果你不想要,你需要转义字符*
和?
,比如
./basic 1 \* 2