Подтвердить что ты не робот

Допустимы ли аргументы char * argv [] в основном нулевом значении?

Итак, мне интересно, всегда ли параметры командной строки заканчиваются на нуль? 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
4b9b3361

Ответ 1

Да. Ненулевые указатели в массиве argv указывают на строки C, которые по определению завершаются нулем.

Стандарт языка C просто утверждает, что члены массива "должны содержать указатели на строки" (C99 §5.1.2.2.1/2). Строка - это "непрерывная последовательность символов, оканчивающаяся первым нулевым символом и включающая в себя первый символ" (C99 §7.1.1/1), т.е. Они обнуляются по определению.

Кроме того, элемент массива в argv[argc] является нулевым указателем, поэтому сам массив также, в некотором смысле, "завершен нулем".

Ответ 2

Да, всегда верно, что аргументы представляют собой строки с нулевым завершением.