Recall how string literals work in C - "\0" is a character array containing two zero bytes (the one you asked for, and the implicit one at the end). When evaluated for the if test, it decays into a pointer to its first character. This pointer is not NULL, so it's considered true when used as a condition.
'\0' is the number zero, equivalent to just 0. It's an integer which is zero, so it's considered false when used as a condition.