Я обнаружил ошибку в своем коде, когда сравнил указатель с '\ 0'.
Интересно, почему компилятор не предупредил меня об этой ошибке, я попробовал следующее.
#include <cassert>
struct Foo
{
char bar[5];
};
int main()
{
Foo f;
Foo* p = &f;
p->bar[0] = '\0';
assert(p->bar == '\0'); // #1. I forgot [] Now, comparing pointer with NULL and fails.
assert(p->bar == 'A'); // #2. error: ISO C++ forbids comparison between pointer and integer
assert(p->bar[0] == '\0'); // #3. What I intended, PASSES
return 0;
}
Что такого особенного в '\ 0', которое делает # 1 законным, а # 2 незаконным?
Пожалуйста, добавьте ссылку или цитату к вашему ответу.