文字列の終了を判定するのに NULL と比較しているコードをよく見ますが、これは間違いです。
文字列の終了コードは '\0' です。0x00 と記載しても単に 0 と記載してもいいですが、とにかく 0 です。
NULL は、たまたまあなたの使っているコンパイラが 0 と定義しているだけです。( NULL を 0 と定義していない処理系もあるそうです。)
NULL は、「ヌルポインタ」という「いかなるアドレスとも区別可能な特殊なポインタ」の定義です。
それでは、現在、なぜ問題が発生していないかというと、コンパイラが、ポインタ変数に対して NULL が使われた場合はヌルポインタとして処理し、その他の変数に対して使われた場合は 0 として処理するというように、親切な作りになっているからです。
ヌルポインタに関する話は、
C言語FAQ
でも詳しく取り上げられています。(結構おもしろいので一読をお勧めします。)
NULL とは別に、NUL というのもあります。(私は、前者を「ヌル」,後者を「ナル」と発音しています。)
これは、ASCIIコード表の 0x00 のコードの略号として使われています。