* Jonny Grant: > On 04/09/2020 20:21, Florian Weimer wrote: >> * Jonny Grant: >> >>> Hello >>> >>> https://man7.org/linux/man-pages/man3/strlen.3.html >>> >>> Is it possible to clarify :- >>> >>> * glibc will SIGSEGV if 's' is NULL >>> * there are no ERROR returns >> >> That would be misleading. Whether strlen (NULL) is undefined also >> depends on the compiler. They know that the argument cannot be zero >> and optimize accordingly. >> > > Hi, > > Do you know a compiler that has a different behaviour? I only tested > gcc and clang. How would a compiler optimise? Here's an example: #include <stddef.h> #include <stdio.h> #include <string.h> void f (const char *str) { strlen (str); if (str == NULL) puts ("str is NULL"); } int main (void) { f (NULL); return 0; } When built with -O2, GCC 8 prints nothing, and there is no crash. My point it's not just the C *library* that makes strlen (NULL) undefined. It's undefined according to the language, and even if we changed the glibc implementation, things would still go wrong.