मैं जहाँ मैं '\ 0' के साथ सूचक तुलना में मेरे कोड में एक बग मिला।' 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 अवैध बनाता है?
अपने जवाब के लिए एक संदर्भ या उद्धरण जोड़ें।
और 0 को 'nullptr' में परिवर्तित किया गया है (सी ++ 11 parlance में) –
@ बेसिलस्टारनकेविच, मुझे नहीं लगता कि यह इस मामले में है। शून्य सूचक स्थिरांक सीधे उचित प्रकार के शून्य सूचक मूल्य में परिवर्तित हो जाता है। – avakar
लेकिन 'nullptr' उचित प्रकार के शून्य सूचक मूल्य को इंगित करता है ... –