I am getting these results. What am I doing wrong?
const char *c = "\0";
cout << (c == NULL); // false
cout << (c == nullptr); //false
I am getting these results. What am I doing wrong?
const char *c = "\0";
cout << (c == NULL); // false
cout << (c == nullptr); //false
On
The pointer c is not a null pointer because it points to the string literal "\0".
const char *c = "\0";
To declare a null pointer you could write for example
const char *c = nullptr;
or
const char *c = 0;
If you want to check whether the pointer points to a null string (provided that it indeed points to a string) then write
cout << !*c;
On
If you're asking about the string's length, then in C++ you'd use std::string which can tell you straight up if it is empty(), or in C you'd check with strlen(c) == 0.
An empty string is actual data, even if it's not necessarily a whole lot of data. It is completely different from a "null" pointer which is one that does not point at any data at all.
The \0 part of the "\0" string is called "NUL" or "NUL byte" to avoid confusion with "NULL" as in pointer, and is how it's described in the ASCII standard.
All literal strings in C++ are really constant arrays of characters, including the null-terminator character.
So doing e.g.
is somewhat equivalent to
So a pointer to a literal string will never be a null pointer.
Also there's a difference between a null pointer and the string null terminator character. A null pointer is a pointer which have been initialized to point to nowhere. A string null terminator character is the character
'\0'. These two are different things.If you want to check to see if a C-style string (using pointers or arrays) is empty, then you first need to make sure it's not a null-pointer (if you're using pointers) and then check to see if the first character is the string null terminator character:
For
std::stringobjects (which you should use for almost all your strings) then you don't need the null-pointer check:Also note that even if a string is not empty, it might contain unprintable characters (like the ASCII control characters), or characters that are "invisible" (like for example space or tab). So if printing the non-empty string it might not show anything.