传递*时,命令行参数编号不正确

箱子

我正在编写一个有关反向波兰表示法的C程序,该程序通过命令行参数获取其操作数和运算符。但是当乘法运算符'*'出现时,事情就出错了,我也不知道为什么。
这是要调试的小程序。

测试

int main(int argc, char **argv)
{
    printf("%d\n", argc);
    return 0;
}

//   run case           result
    ./test a b            3
    ./test *              66

那么,为什么' * '参数会导致错误的结果呢?

我们

*做了壳水珠。因此它将扩展到当前目录中的所有文件,这将是程序的参数,您的目录中有65个文件。您可以查看运行情况echo *

您需要单引号中的*as ./test '*'(也可以使用双引号),这将防止shell扩展**在这种情况下,为您的程序提供了A ,shell删除了单引号。

如果要评估表达式,可以执行

./test 3 2 '*'

在这种情况下,您的程序会收到3个另外的参数,分别argv[1]3argv[2]is2argv[3]is*

或者,您可以执行以下操作:

./test '3 2 *'

在这种情况下,您的程序会收到1个附加参数,argv[1]将是字符串3 2 *

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章