While NULL is almost universally defined as a zero, the C spec allows the compiler vendor to define the string termination character (NULL) to be whatever the vendor deems best.
This is a bit confused.
The standard C string termination character is 0, or '\0'. The compiler cannot just use any old character or let it "be whatever the vendor deems best".
Also, it is more properly called NUL, not NULL.
NULL is the NULL pointer character, a definition to indicate that a pointer is invalid. The C standard specifies that a simple "unadorned" 0 can be used for a null pointer, but folks tend to be paranoid about that, so the NULL define was created which is usually a 0 cast to a void pointer. In this case, the compiler *can* take your 0 or NULL and create a machine-specific invalid pointer, which may or may not be all-bits zero.