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

Bin*_*Bin 6 c shell command-line-arguments

我正在编写一个关于反向波兰表示法的C程序,它通过命令行参数获取操作数和运算符.但是当乘法运算符'*'出现时出现问题,我不知道为什么.
这是要调试的小程序.

test.c的

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

//   run case           result
    ./test a b            3
    ./test *              66
Run Code Online (Sandbox Code Playgroud)

那么为什么' * '论证会产生错误的结果呢?

nos*_*nos 11

*做了壳水珠.因此,它将扩展到当前目录中的所有文件,这将是程序的参数,您的目录中有65个文件.如果你跑,你可以看到发生了什么echo *

你需要单引号,*因为./test '*'(双引号也可以),这将阻止shell扩展*.*在这种情况下,A 给你的程序,shell删除单引号.

如果你想评估表达式,你可以这样做

./test 3 2 '*'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你的程序接收3个额外的参数,分别argv[1]3,argv[2]2argv[3]*

或者你可以这样做:

./test '3 2 *'
Run Code Online (Sandbox Code Playgroud)

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

  • 不,你不必将`'*'`解析为`*`.shell是将`*`更改为当前目录中的文件列表,将`'*'`(或``*"`)更改为`*`.所以从shell中给你的程序''*'`给你的程序只有一个包含`*`而没有引号的参数. (3认同)

Bat*_*eba 8

您的命令shell将*视为通配符.它可能包括当前目录中的每个文件:在你的情况下为60ish.