main null中的char * argv []参数是否终止?

时间:2012-06-13 17:25:53

标签: c argv null-terminated

所以我想知道命令行参数是否总是以空值终止? Google似乎是肯定的,并且在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

2 个答案:

答案 0 :(得分:66)

是。 argv数组中的指针指向C字符串,根据定义,它们以空值终止。

C语言标准只是声明数组成员“应包含指向字符串的指针”(C99§5.1.2.2.1/ 2)。字符串是“由第一个空字符终止并包含第一个空字符的连续字符序列”(C99§7.1.1/ 1),也就是说,它们按定义以空值终止。

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

答案 1 :(得分:4)

是的,参数始终为空终止字符串。