Узкая (широкая) символьная строка перешла к широкой (узкой) строковой функции
Этот дефект возникает, когда вы передаете узкую символьную строку в широкую строковую функцию или широкую строку символов в узкую строковую функцию.
Неправильное использование узкой или широкой символьной строки не вызывает дефекта в операционных системах, где узкие и широкие символьные строки имеют одинаковый размер.
Использование узкой символьной строки с широкой строковой функцией или наоборот может привести к неожиданному или неопределенному поведению.
Если вы передаете широкую символьную строку в узкую строковую функцию, можно столкнуться с этими проблемами:
Усечение данных. Если строка содержит ядро байтов, операция копирования с использованием 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