50

所以我想知道命令行参数是否总是空终止?谷歌似乎说是的,在 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
4

2 回答 2

83

是的。数组中的非空指针argv指向 C 字符串,根据定义,这些字符串是空终止的。

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

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

于 2012-06-13T17:27:31.570 回答
4

是的,参数总是以空字符结尾的字符串是正确的。

于 2012-06-13T17:27:11.800 回答