Inefficient string length computation
String length calculated by using string length functions on return from
std::basic_string::c_str() instead of using
std::basic_string::length()
Description
This defect occurs when the length of a std::basic_string string is
calculated by using string length functions on the pointer returned from
std::basic_string::c_str() instead of using the method
std::basic_string::length().
The checker flags string length functions such as strlen,
wcslen and char_traits::length.
Risk
std::basic_string::c_str() returns a pointer to a null-terminated
character array that stores the same data as the data stored in the string. Using a string
length function such as strlen on this character array is expected to
return the string length. This approach might seem superficially equivalent to using the
std::basic_string::length() method for the string length.
However, the function strlen(str) is of linear complexity O(N) where
N is the length of string str. If str is of type
std::basic_string, this complexity is unnecessary since calling the
std::basic_string::length() method returns the length more efficiently
(with complexity O(1)).
Fix
If a string is of type std::basic_string, to get the string length,
instead of using string length functions such as strlen, for
instance:
std::string s; auto len = strlen(s.ctr());
std::basic_string::length() method, for
instance:std::string s; auto len = s.length();
Performance improvements might vary based on the compiler, library implementation, and environment that you are using.
Result Information
| Group: Performance |
| Language: C++ |
| Default: Off |
Command-Line Syntax:
INEFFICIENT_BASIC_STRING_LENGTH |
| Impact: Medium |
Version History
Introduced in R2020a
See Also
Topics
- Interpret Bug Finder Results in Polyspace Desktop User Interface
- Interpret Bug Finder Results in Polyspace Access Web Interface (Polyspace Access)
- Address Results in Polyspace User Interface Through Bug Fixes or Justifications
- Address Results in Polyspace Access Through Bug Fixes or Justifications (Polyspace Access)