Incorrect use of `strcmp`CXX-W2050
Suspicious usage of runtime string comparison functions can lead to unintended behavior and bugs in C and C++ code. This check detects calls to string comparison functions, such as strcmp
, where the result is implicitly compared to zero. It is recommended to explicitly compare the result to a valid constant value, such as < 0
, > 0
, or == 0
, to ensure the desired behavior.
A common mistake is to compare the result to 1
or -1
, which is incorrect usage of the returned value. Instead, the result should be compared to 0
for equality.
Additionally, this check warns if the result value is implicitly cast to a non-integer type. This can occur when the returned value is used in an incorrect context. It is important to ensure that the result is used in a context that matches its type.
Bad Practice
if (strcmp(...) == -1) {
// Incorrect usage of the returned value.
}
if (strcmp(...) < 0.) {
// Incorrect usage of the returned value.
}
Recommended
// if not zero then not equal
if (strcmp(...) != 0) {
// Correctly compares the result to a valid constant.
}
// strcmp returns int promoting to float is meaningless
if (strcmp(...) < 0) {
// Correctly compares the result to a valid constant.
}