How to get length of a string using strlen function
For C++ strings, there's no reason to use strlen
. Just use string::length
:
std::cout << str.length() << std::endl;
You should strongly prefer this to strlen(str.c_str())
for the following reasons:
Clarity: The
length()
(orsize()
) member functions unambiguously give back the length of the string. While it's possible to figure out whatstrlen(str.c_str())
does, it forces the reader to pause for a bit.Efficiency:
length()
andsize()
run in time O(1), whilestrlen(str.c_str())
will take Θ(n) time to find the end of the string.Style: It's good to prefer the C++ versions of functions to the C versions unless there's a specific reason to do so otherwise. This is why, for example, it's usually considered better to use
std::sort
overqsort
orstd::lower_bound
overbsearch
, unless some other factors come into play that would affect performance.
The only reason I could think of where strlen
would be useful is if you had a C++-style string that had embedded null characters and you wanted to determine how many characters appeared before the first of them. (That's one way in which strlen
differs from string::length
; the former stops at a null terminator, and the latter counts all the characters in the string). But if that's the case, just use string::find
:
size_t index = str.find(0);
if (index == str::npos) index = str.length();
std::cout << index << std::endl;
Hope this helps!
Use std::string::size
or std::string::length
(both are the same).
As you insist to use strlen
, you can:
int size = strlen( str.c_str() );
note the usage of std::string::c_str
, which returns const char*
.
BUT strlen
counts untill it hit \0
char and std::string
can store such chars. In other words, strlen
could sometimes lie for the size.
Function strlen
shows the number of character before \0
and using it for std::string
may report wrong length.
strlen(str.c_str()); // It may return wrong length.
In C++, a string can contain \0
within the characters but C-style-zero-terminated strings can not but at the end. If the std::string
has a \0
before the last character then strlen
reports a length less than the actual length.
Try to use .length()
or .size()
, I prefer second one since another standard containers have it.
str.size()