Is it safe to put NULL pointer as parameter of strncmp
if the third parameter is zero? I.e. an invocation like:
strncmp(NULL, "foo", 0);
It's undefined behavior.
C standard says you should not pass invalid pointers to library function, in general.
Quoting C11
, chapter §7.24.1, "String function conventions", (emphasis mine)
Where an argument declared as
size_t n
specifies the length of the array for a function,n
can have the value zero on a call to that function. Unless explicitly stated otherwise in the description of a particular function in this subclause, pointer arguments on such a call shall still have valid values, as described in 7.1.4. On such a call, a function that locates a character finds no occurrence, a function that compares two character sequences returns zero, and a function that copies characters copies zero characters.
and I don't see any specific mention (as an exception to the aforesaid constraint) in 7.24.4.4, strncmp()
function.
To add context for "invalid pointers", quoting §7.1.4/p1, Use of library functions
[...] If an argument to a function has an invalid value (such as a value outside the domain of the function, or a pointer outside the address space of the program, or a null pointer, or a pointer to non-modifiable storage when the corresponding parameter is not const-qualified) or a type (after promotion) not expected by a function with variable number of arguments, the behavior is undefined. [...]
and regarding NULL
, quoting §7.19, <stddef.h>
NULL
which expands to an implementation-defined null pointer constant; [...]