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
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é".
Oui, il est toujours vrai que les arguments sont des chaînes terminées par null.