﻿# V698\. Functions of strcmp\(\) kind can return any values, not only \-1, 0, or 1\.

The analyzer has detected a comparison of the result of strcmp\(\) or similar function to 1 or \-1\. The C/C\+\+ language specification, however, says that the strcmp\(\) function can return any positive or negative value when strings are not equal – not only 1 or \-1\.

Depending on the implementation, the strcmp\(\) function can return the following values when strings are not equal:

* \-1 or **any negative number** if the first string is less than the second in the lexicographical order;
* 1 or **any positive number** if the first string is larger than the second\.

Whether constructs like strcmp\(\) \=\= 1 will work right depends on libraries, the compiler and its settings, the operating system and its bitness, and so on; in this case you should always write strcmp\(\) \> 0\.

For example, below is a fragment of incorrect code:

```cpp
std::vector<char *> vec;
....
std::sort(vec.begin(), vec.end(), [](
    const char * a, const char * b)
  {
    return strcmp(a, b) == 1;
  });
```

When you change over to a different compiler, target operating system or application bitness, the code may start working improperly\.

The fixed code:

```cpp
std::vector<char *> vec;
....
std::sort(vec.begin(), vec.end(), [](
    const char * a, const char * b)
  {
    return strcmp(a, b) > 0;
  });
```

The analyzer also considers code incorrect when it compares results of two strcmp\(\) functions\. Such code is very rare but always needs examining\.