StringCbPrintf() vs StringCchPrintf()
Довольно давно уже смотрю на одну вещь и в упор не могу понять: какая принципиальная разница между функциями StringCbPrintf() и StringCchPrintf()? Описания этих функций один в один идентичны.
А какая разница у размеров строки, посчитанных в символах и в байтах?
[QUOTE=MSDN: StringCbPrintf]
The maximum number of bytes allowed is STRSAFE_MAX_CCH * sizeof(TCHAR).
[/QUOTE]
[QUOTE=MSDN: StringCchPrintf]
The maximum number of characters allowed is STRSAFE_MAX_CCH.
[/QUOTE]
TCHAR
PS: Уже ~30 лет минуло с тех пор, а осознания, что помимо 128 символов существуют иные и их представление так и не пришло, жаль.
PS: Уже ~30 лет минуло с тех пор, а осознания, что помимо 128 символов существуют иные и их представление так и не пришло, жаль.
P.S. Переформулирую вопрос: неужели вся разница заключается только в том, считать ли длину строки в байтах или в символах? Не вполне понимаю, зачем было так делать, если учесть, что для обеих функций существуют и Ansi-, и Unicode-версия.
Цитата: Alexander92
Переформулирую вопрос: неужели вся разница заключается только в том, считать ли длину строки в байтах или в символах? Не вполне понимаю, зачем было так делать, если учесть, что для обеих функций существуют и Ansi-, и Unicode-версия.
Все сделано для того, чтобы разработчик не заморачивался различными версиями функций, а использовал макросы, делающие код универсальным. А считать в байтах или символах - значения ведь разные получатся в ANSI и в UNICODE. Эта функция усекает строку, которая больше по размеру (опять же - в байтах или в символах), чем значение, указанное во втором параметре.