c argv null-terminated

¿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".