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()
(or size()
) member functions unambiguously give back the length of the string. While it's possible to figure out what strlen(str.c_str())
does, it forces the reader to pause for a bit.
Efficiency: length()
and size()
run in time O(1), while strlen(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
over qsort
or std::lower_bound
over bsearch
, 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;