所以我想知道命令行参数是否总是以null结尾?谷歌似乎说是的,在GCC上编译表明情况就是这样,但我能保证这永远是真的吗?

int main(int argc, char** argv)
{
    char *p;

    for(int cnt=1; cnt < argc; ++cnt)
    {
        p = argv[cnt];
        printf("%d = [%s]\n", cnt, p);
    }
    return 0;
}

$ MyProgram -arg1 -arg2 -arg3
1 = -arg1
2 = -arg2
3 = -arg3

推荐答案

argv数组中的非空指针指向C字符串,根据定义,C字符串以null结尾.

C语言标准仅规定数组成员"应包含指向字符串的指针"(C99§5.1.2.2.1/2).字符串是"由第一个空字符(C99§7.1.1/1)终止并包括第一个空字符的连续字符序列",也就是说,它们根据定义以空结尾.

此外,argv[argc]处的数组元素是空指针,因此在某种意义上,数组本身也是"空终止的".

C++相关问答推荐

C strlen on char array

自定义应用程序上的日志(log)轮换问题

正在try 将文件/文件夹名从目录 struct 存储到链接列表

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

在C23中使用_GENERIC实现带有右值的IS_POINTER(P)?

如何在不使用其他数组或字符串的情况下交换字符串中的两个单词?

我在这里正确地解释了C操作顺序吗?

在循环中复制与删除相同条件代码的性能

无法在OpenGL上绘制三角形

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

如何使用唯一数字对整型进行分区

为四维数组中的Dim-1和Dim-3重新分配空间

有没有一种方法可以用C创建保留限定符的函数?

传递给函数的 struct 中的数组

Linux Posix消息队列

";错误:寄存器的使用无效;当使用-masm=intel;在gcc中,但在AT&;T模式

函数指针作为函数参数 - 应该使用 const 吗?

根据输入/输出将 C 编译过程分为预处理、编译、汇编和链接步骤

可以从指针数组中的值初始化指针吗?

nullptr_t 是否会 destruct 类型双关或指针转换?