Узкая (широкая) символьная строка перешла к широкой (узкой) строковой функции
Этот дефект возникает, когда вы передаете узкую символьную строку в широкую строковую функцию или широкую строку символов в узкую строковую функцию.
Неправильное использование узкой или широкой символьной строки не вызывает дефекта в операционных системах, где узкие и широкие символьные строки имеют одинаковый размер.
Использование узкой символьной строки с широкой строковой функцией или наоборот может привести к неожиданному или неопределенному поведению.
Если вы передаете широкую символьную строку в узкую строковую функцию, можно столкнуться с этими проблемами:
Усечение данных. Если строка содержит ядро байтов, операция копирования с использованием strncpy()
может завершиться досрочно.
Неправильная длина строки. strlen()
возвращает количество символов в строке до первого нулевого байта. Широкая строка может иметь дополнительные символы после первого ядра байта.
Если вы передаете узкую символьную строку в широкую строковую функцию, можно столкнуться с этой проблемой:
Переполнение буфера. В операции копирования с помощью wcsncpy()
конечная строка может иметь недостаточно памяти для хранения результатов копирования.
Используйте узкие строковые функции с узкими символьными строками. Используйте широкие строковые функции с широкими символьными строками.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: Off |
Синтаксис командной строки
: NARROW_WIDE_STR_MISUSE |
Влияние: Высокий |
ИДЕНТИФИКАТОР CWE : 135 |
Array access out of bounds
| Destination buffer overflow in string manipulation
| Find defects (-checkers)
| Invalid use of standard library routine
| Invalid use of standard library string routine
| Pointer access out of bounds
| Unreliable cast of function pointer
| Wrong allocated object size for cast