Узкая (широкая) символьная строка передала широкой (узкой) строковой функции
Неправильное употребление строки узкого или широкого символа происходит, когда вы передаете строку узкого символа широкой строковой функции или строку широкого символа к узкой строковой функции.
Неправильное употребление строки узкого или широкого символа не повышает дефекта на операционных системах, где строки узкого и широкого символа имеют тот же размер.
Используя строку узкого символа с широкой строковой функцией, или наоборот, может привести к неожиданному или неопределенному поведению.
Если вы передаете строку широкого символа узкой строковой функции, можно столкнуться с этими проблемами:
Усечение данных. Если строка содержит пустые байты, операция копии с помощью strncpy()
может завершить работу рано.
Неправильная длина строки. strlen()
возвращает количество символов строки до первого пустого байта. Широкая строка может иметь дополнительные символы после своего первого пустого байта.
Если вы передаете строку узкого символа широкой строковой функции, можно столкнуться с этой проблемой:
Переполнение буфера. В операции копии с помощью wcsncpy()
, целевая строка может иметь недостаточно память, чтобы сохранить результат копии.
Используйте узкие строковые функции со строками узкого символа. Используйте широкие строковые функции со строками широкого символа.
Группа: Программирование |
Язык: C | C++ |
Значение по умолчанию: 'off' |
Синтаксис командной строки:
NARROW_WIDE_STR_MISUSE |
Удар: высоко |
ID 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