我正在编写一个关于反向波兰表示法的C程序,它通过命令行参数获取操作数和运算符。但是当乘法运算符'*'出现时出现问题,我不知道为什么 这是要调试的小程序。
test.c
int main(int argc, char **argv)
{
printf("%d\n", argc);
return 0;
}
// run case result
./test a b 3
./test * 66
那么为什么“ * ”参数会产生错误的结果?
答案 0 :(得分:11)
*
执行shell glob。因此,它将扩展到当前目录中的所有文件,这将是程序的参数,您的目录中有65个文件。如果您运行echo *
您需要单引*
引用./test '*'
(双引号也可以),这样可以防止shell展开*
。在这种情况下,程序会给*
,shell会删除单引号。
如果你想评估表达式,你可以做
./test 3 2 '*'
在这种情况下,您的程序会另外收到3个参数,因此argv[1]
为3
,argv[2]
为2
且argv[3]
为*
< / p>
或者你可以这样做:
./test '3 2 *'
在这种情况下,您的程序会收到另外一个参数,argv[1]
将是字符串3 2 *
答案 1 :(得分:8)
您的命令shell将*视为通配符。它可能包括当前目录中的每个文件:在你的情况下是60ish。