当将“*”作为在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;
}
我将其编译为-
dev@ubuntu:~$ gcc test2.c -o t
dev@ubuntu:~$ ./t *
31
因此,我将参数计数值设为31;而如果'*'被其他二进制运算符替换; argc的值为2(在逻辑上也是正确的)。
dev@ubuntu:~$ ./t +
2
我无法理解为什么会这样....还有另外一件有趣的事情。当用'-'代替''时;答案是2(这在逻辑上也是正确的)
dev@ubuntu:~$ ./t -*
2
谁能帮助我;在此先感谢。
最佳答案
它只是 shell 扩展。 Shell会将*
扩展为程序正在执行的当前目录中的文件名(包括目录)。+
或;
没有特殊的解释,因此它们被视为普通字符串,但是*
具有特殊的解释,因此它被扩展为当前目录中所有文件的列表,并传递给您的程序。
尝试使用./t '*'
或./t \*
这将停止对*
的特殊解释。第一个使用bash(看起来像是在bash中)单引号,在单引号内的模式内未做任何特殊的解释,第二个使用转义序列。