V805. Decreased performance. It is inefficient to identify an empty string by using 'strlen(str) > 0' construct. A more efficient way is to check: str[0] != '\0'

June 14, 2012

The analyzer detected a construct that can be optimized. To determine whether a code string is empty or not, the strlen function or some other identical function is used. For example:

if (strlen(strUrl) > 0)

This code is correct, but if it is used inside a long loop or if we handle long strings, such a check might be inefficient. To check if a string is empty or not, we just have to compare the first character of the string with 0. This is an optimized code:

if (strUrl[0] != '\0')

Sometimes the V805 warning helps to detect excessive code. In one application we have found a code fragment like the following one:

string path;
...
if (strlen(path.c_str()) != 0)

Most likely, this code appeared during careless refactoring when the type of the path variable had been changed from a simple pointer to std::string. This is a shorter and faster code: