It would help if we could see a bit more of the code. Perhaps you're confused on terminology.
Code:
char *s = NULL; /* create a pointer, and make it point to NULL (ie: nothing) */
If you do not initialize a pointer, it does not by default point to null, it points some place randomly, which will more often than not cause you problems. As such, it's always best to make sure your pointers are pointing some place when you create them. The "some place" in this instance happens to be NULL. (Which techincly means "no place", but that's better than "random place".
Code:
char *s = ""; /* Create a pointer and have it point to an empty string. */
This is not the same as NULL. NULL means it points specificly to no place at all. This however is different. This is in fact pointing to an empty string literal. That's not null.
Code:
char *s = "Hello!"; /* Create a pointer pointing at a string literal. */
char *end = s + strlen( s ); /* Jump to the null character in the string */
Here, the pointer end is pointing to the end of the string. A string by definition contains a number of characters, terminated by a null character. NULL and a null character are not the same thing. A string contains a null character (or null terminator) which denotes the end of the string.
That is not the same thing as a pointer pointing to NULL.
A null character is the character '\0'. This is not the same thing as NULL. One you're seeing if the character itself is "nothing", and the other you're testing a pointer to see if the pointer points to "nowhere".
Quzah.