memcmp
сравнивает данные, хранящиеся в строках после null terminator
Этот дефект возникает, когда:
Вы сравниваете две строки байт за байтом с memcmp
функция.
Количество сравниваемых байтов таково, что вы сравниваете бессмысленные данные, хранящиеся после null terminator.
Для образца:
memcmp(string1, string2, sizeof(string1))
null terminator означает конец строки. Сравнение байтов после терминатора строки бессмысленно. Вы можете прийти к ложному выводу, что две строки не равны, даже если байты перед null terminator хранят одно и то же значение.
Использование strcmp
для сравнения строк. Функция сравнивает строки только с null terminator.
Если вы используете memcmp
для сравнения байт/байт двух строк избегайте сравнения байтов после нулевого терминатора строки. Определите количество байтов для сравнения с помощью strlen
функция.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки: MEMCMP_STRINGS |
Влияние: Средний |
ИДЕНТИФИКАТОР CWE: 188 |