c language-lawyer strncmp

¿Está bien definido strncmp(NULL, "foo", 0)?



strncmp matlab (2)

De la documentación de C strncmp en cppreference.com :

El comportamiento no está definido cuando lhs o rhs es el puntero nulo.

Simplemente lea la documentación.

¿Es seguro colocar el puntero NULL como parámetro de strncmp si el tercer parámetro es cero? Es decir, una invocación como:

strncmp(NULL, "foo", 0);


Es un comportamiento indefinido .

El estándar C dice que no debe pasar los punteros no válidos a la función de biblioteca, en general.

Citando C11 , capítulo §7.24.1, "Convenciones de la función de cadena", (el énfasis es mío )

Cuando un argumento declarado como size_t n especifica la longitud de la matriz para una función, n puede tener el valor cero en una llamada a esa función. A menos que se indique explícitamente lo contrario en la descripción de una función particular en esta subcláusula, los argumentos de puntero en dicha llamada seguirán teniendo valores válidos, como se describe en 7.1.4 . En una llamada de este tipo, una función que localiza un carácter no encuentra ocurrencia, una función que compara dos secuencias de caracteres devuelve cero, y una función que copia caracteres copia cero caracteres.

y no veo ninguna mención específica (como excepción a la restricción antes mencionada) en 7.24.4.4, función strncmp() .

Para agregar contexto para "punteros no válidos", citando §7.1.4 / p1, Uso de funciones de biblioteca

[...] Si un argumento de una función tiene un valor no válido (como un valor fuera del dominio de la función, o un puntero fuera del espacio de direcciones del programa, o un puntero nulo , o un puntero a no modificable) almacenamiento cuando el parámetro correspondiente no está calificado por completo) o un tipo (después de la promoción) no esperado por una función con número variable de argumentos, el comportamiento no está definido. [...]

y con respecto a NULL , citando §7.19, <stddef.h>

NULL
que se expande a una constante de puntero nula definida por la implementación; [...]