gpt4 book ai didi

c - argv[0] 什么时候可以为空?

转载 作者:太空狗 更新时间:2023-10-29 16:22:11 24 4
gpt4 key购买 nike

我对从命令行向 main() 传递参数的理解是 argc 的最小值为 1,而 argv[0] 将始终包含程序名称及其路径。

如果在命令行中提供了参数,那么 argc 的值将大于 1,而 argv 1 argv[argc-1] 将具有这些参数。

现在是 this link 的一段说

argv[0] will be a string containing the program's name or a null string if that is not available.

现在,argv[0] 如何以及何时可以有空字符串?我的意思是程序名称及其路径将始终可用,所以什么时候可以为空?

作者说“如果那不可用”但是程序名称何时以及如何可能不可用?

最佳答案

使用 exec 调用类,您可以分别指定程序 name 和程序 executable ,这样您就可以将其设置为 NULL。

但这句话实际上来自 ISO 标准(可能是转述的),并且该标准涵盖了从最小的微 Controller 到最新的 z10 企业级大型机的范围极广的执行环境。

许多嵌入式系统都处于可执行名称毫无意义的情况。

来自最新的c1x草案:

The value of argc shall be nonnegative.

The value argv[argc] shall be a null pointer.

If the value of argc is greater than zero, the array members argv[0] through argv[argc-1] inclusive shall contain pointers to strings, which are given implementation-defined values by the host environment prior to program start up.

这意味着,如果 argc 为零(并且可以为零),则 argv[0] 为 NULL。

但是,即使 argc 不是 0,您也可能无法获得程序名称,因为标准还规定:

If the value of argc is greater than zero, the string pointed to by argv[0] represents the program name; argv[0][0] shall be the null character if the program name is not available from the host environment. If the value of argc is greater than one, the strings pointed to by argv[1] through argv[argc-1] represent the program parameters.

因此,标准没有要求提供程序名称。我见过程序为此值使用多种选项:

  • 完全没有值(value)(为了假定的安全性)。
  • 一个公然的谎言(例如对一段恶意代码的 sleep)。
  • 实际的程序名称(例如sleep)。
  • 稍作修改(例如用于登录 shell 的 -ksh)。
  • 描述性名称(例如,progname - a program for something)。

关于c - argv[0] 什么时候可以为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2794150/

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