web-dev-qa-db-fra.com

Les arguments char * argv [] dans null principal se terminent-ils?

Je me demande donc si les paramètres de ligne de commande sont toujours terminés par null? Google semble dire oui, et la compilation sur GCC indique que c'est le cas, mais puis-je garantir que cela soit toujours vrai?

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
43
LeviX

Oui. Les pointeurs non nuls du tableau argv pointent vers des chaînes C, par définition terminées par null.

La norme de langage C stipule simplement que les membres du tableau "doivent contenir des pointeurs vers des chaînes" (C99 §5.1.2.2.1/2). Une chaîne est "une séquence contiguë de caractères se terminant par et incluant le premier caractère nul" (C99 §7.1.1/1), c'est-à-dire qu'ils sont nus se terminant par définition.

De plus, l'élément de tableau à argv[argc] est un pointeur nul, donc le tableau lui-même est également, dans un sens, "null terminé".

68
James McNellis

Oui, il est toujours vrai que les arguments sont des chaînes terminées par null.

4
Triton Man