Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
нашел в инете 01.04.05 23:35 Число просмотров: 2141
Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 01.04.05 23:42 Количество правок: 2
|
ссылка - http://csislabs.palomar.edu/Student/Directx9.0/dx9sdk/Include/strsafe.h
Смотрим сырцы:
StringCchCopy является враппером для StringCopyWorkerA
StringCopyWorkerA в свою очередь написан вполне корректно и переполнения не получится если cchDest - это размер буфера КУДА ПРОИЗВОДИТСЯ ЗАПИСЬ. То бишь - размер pszDest. Функция как и предполалось полностью идентична strncpy за исключением гарантированного обнуления последнего символа строки.
В коментах StringCchCopy написано:
cchDest - size of destination buffer in characters.
length must be = (_tcslen(src) + 1) to hold all of the
source including the null terminator
То бишь имелось ввиду что для того чтобы строка была переписана полностью размер буфера pszDest должен быть (_tcslen(src) + 1). Ну и соответственно параметр cchDest, показывающий размер буфера таким будет. Но это значит что надо выделить память под pszDest столько а не просто передать такой cchDest.
А вот те кто писали МСДН написали уже так:
cchDest
[in] Size of the destination buffer, in characters. This value must equal the length of pszSrc plus 1 to account for the copied source string and the terminating null character. The maximum number of characters allowed is STRSAFE_MAX_CCH.
То есть случай как с запятой - казнить нельзя помиловать. Смысл перевран полнстью от небольшой перефразировки тех кто писал статью мсдн по комментам из сырцов. Напишите ктонить Биллу Гейтсу чтоб исправили, а то скоро все компутерно-популярные издания начнут пестреть заголовками что МС облажались (хотя в какой то степени оно так и есть Ж))
btw - сам факт наличия реализации функции в хедере тоже очень прикалывает Ж)
|
|
|