Мне кажется, что не стоит так неосторожно использовать слово NULL. Правильно: null-terminated (прописными буквами), NUL (как название символа ASCII), '\0'.
А NULL — это константа, введённая для обозначения нулевого указателя. Она обычно определяется как #define NULL 0, но предназначена для замены ключевого слова null, которое есть во многих других языках. Иногда её определяют как #define NULL (void *)0.
В C и C++ с этим вообще небольшая путаница. Дело в том, что литерал «0» при использовании в случае с указателями означает не числовое значение «0», а значение нулевого указателя на данной конкретной платформе. Это может быть и адрес 0xFFFFFF или ещё какой-нибудь другой. В C++11 есть ключевое слово nullptr, лучше использовать его вместо NULL.
А NULL — это константа, введённая для обозначения нулевого указателя. Она обычно определяется как #define NULL 0, но предназначена для замены ключевого слова null, которое есть во многих других языках. Иногда её определяют как #define NULL (void *)0.
В C и C++ с этим вообще небольшая путаница. Дело в том, что литерал «0» при использовании в случае с указателями означает не числовое значение «0», а значение нулевого указателя на данной конкретной платформе. Это может быть и адрес 0xFFFFFF или ещё какой-нибудь другой. В C++11 есть ключевое слово nullptr, лучше использовать его вместо NULL.