¿Están terminados los argumentos char*argv[] en null principal?
null-terminated (2)
Entonces, me pregunto si los parámetros de la línea de comandos siempre terminan nulos. Google parece decir que sí, y compilar en GCC indica que este es el caso, pero ¿puedo garantizar que esto sea siempre cierto?
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
Sí, siempre es cierto que los argumentos son cadenas terminadas nulas.
Sí. Los punteros en la matriz argv
apuntan a las cadenas C, que por definición son nulas.
El estándar de lenguaje C simplemente establece que los miembros de la matriz "deberán contener punteros a las cadenas" (C99 §5.1.2.2.1 / 2). Una cadena es "una secuencia contigua de caracteres terminados por e incluyendo el primer carácter nulo" (C99 §7.1.1 / 1), es decir, son nulos terminados por definición.
Además, el elemento de matriz en argv[argc]
es un puntero nulo, por lo que la matriz misma también es, en cierto sentido, "nulo terminado".