gpt4 book ai didi

c++ - 当 * 作为参数之一传递时 argc 的值在 c 中调用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:09 26 4
gpt4 key购买 nike

当'*'作为调用程序的参数之一传递时,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 会将 * 扩展为程序正在执行的当前目录中的文件名(包括目录)。

+; 没有特殊解释,因此它们被认为是普通字符串,但是 * 有特殊解释,因此被扩展到当前目录中所有文件的列表,该列表将传递给您的程序。

尝试使用

./t '*'./t\*

这将停止对* 的特殊解释。第一个使用bash( 看起来 你在bash中)单引号,在引号的模式内部没有做任何特殊解释,下一个使用转义序列。

关于c++ - 当 * 作为参数之一传递时 argc 的值在 c 中调用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com