当'*'作为调用c中的程序的参数之一传递时,argc的值存在异常.我在c中创建了一个简单的代码并将其保存为'test2.c'.这是'test2.c'的以下代码---
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char* argv[])
{
printf("%d\n",argc);return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译它并将其称为 -
dev@ubuntu:~$ gcc test2.c -o t
dev@ubuntu:~$ ./t *
31
Run Code Online (Sandbox Code Playgroud)
所以,我得到的参数计数值为31; 而如果'*'被任何其他二元运算符替换; argc的值是2(这在逻辑上也是正确的).
dev@ubuntu:~$ ./t +
2
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么会这样....而且还有一件有趣的事情.当' - '用来代替' ';答案是2(这在逻辑上是正确的)
dev@ubuntu:~$ ./t -*
2
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我;提前感谢.
pho*_*xis 10
它只是壳扩展.shell将扩展*到执行程序的当前目录中的文件名(包括目录).
+或者;没有特殊的解释因此它们被视为普通字符串,但*具有特殊的解释,因此它被扩展到当前目录中的所有文件的列表,并传递给您的程序.
尝试使用
./t '*' 要么 ./t \*
这停止了特殊的解释*.第一个使用了bash(看起来像你在bash中)单引号,它没有在引用中的模式中做出任何特殊的解释,而下一个使用转义序列.