There are many endearing string functions in the C standard library, such as (in string.h)
char *strcat(char *str1, const char *str2);
or (in stdlib.h)
long int strtol(const char *nptr, char **endptr, int base);
(Ignore the wisdom of calling these functions, for the purposes of this question.)
What will happen if I pass any of these functions a NULL pointer? (I mean (char *) 0, not the empty string.)
I haven't found any answers in the man pages or on the web.
This leads me to think it's implementation-defined, but it could just as well mean an automatic segmentation fault; no special error behavior or return values are specified, either.
Could the behavior even vary from function to function, within the same implementation?
The C standard says it in 7.21.1 String Function Conventions, clause 2:
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.
7.1.4 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.
strcat()'s description in 7.21.3.1 says nothing about the NULL pointer being a valid input, hence, I conclude, the behavior is officially undefined if any of its input pointers is NULL.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With