根据主程序的标准定义:

int main(int argc, char *argv[]) {
   ...
}

在什么情况下,POSIX系统上的argc可以为零?

推荐答案

是的,这是可能的.如果您按以下方式调用您的程序:

execl("./myprog", NULL, (char *)NULL);

或者:

char *args[] = { NULL };
execv("./myprog", args);

然后在"myprog"中,argc将是0.

The standard还特别允许0 argc,如第5.1.2.2.1节所述,关于托管环境中的程序启动:

1程序启动时调用的函数名为main.实现没有声明此函数的原型.应该是

int main(void) { /* ... */ } 

或者使用两个参数(这里称为argcargv,尽管可以使用任何名称,因为它们是本地的 到声明它们的函数):

int main(int argc, char *argv[]) { /* ... */ }

或同等品;或者以其他实现定义的方式.

2如果已声明,main功能的参数应遵守以下约束:

  • The value of 100 shall be nonnegative.
  • argv[argc]应为空指针.

...

还要注意,这意味着如果argc是0,那么argv[0]保证为空.然而,printf在用作%s说明符的参数时如何处理空指针在标准中没有详细说明.在这种情况下,许多实现都会输出"(null)",但这并不能保证.

C++相关问答推荐

Ebpf内核代码:permission denied:invalid access to map value

C语言中字符数组声明中的标准

为什么在C中进行大量的位移位?

从组播组地址了解收到的数据包长度

如何在C中从函数返回指向数组的指针?

C:fopen是如何实现二进制模式和文本模式的?

如何知道我是否从非阻塞套接字读取所有内容

在基本OpenGL纹理四边形中的一个三角形中进行渲染

有什么方法可以将字符串与我们 Select 的子字符串分开吗?喜欢:SIN(LOG(10))

为什么数组的最后一个元素丢失了?

C";中的ANN运行时判断失败#2-变量outputLayer;周围的堆栈已损坏.运行后出错

为什么我的旧式&q;函数在传递浮点数时会打印2?

用C++初始化局部数组变量

gdb - 你能找到持有内部 glibc 锁的线程吗?

C/C++编译器可以在编译过程中通过按引用传递来优化按值传递吗?

如何从文件中读取一长串数据?

从控制台读取时,Linux相当于WaitForSingleObject?

在 C 中,在故障/退出点释放分配的资源的良好编码实践是什么?

无法理解 CS50 中的 char* 和 string

解释 printf("%# 01.1g",9.8) 中的格式说明符