Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

StringCbPrintf() vs StringCchPrintf()

278
08 января 2012 года
Alexander92
1.1K / / 04.08.2008
Всем доброго времени суток.
Довольно давно уже смотрю на одну вещь и в упор не могу понять: какая принципиальная разница между функциями StringCbPrintf() и StringCchPrintf()? Описания этих функций один в один идентичны.
260
09 января 2012 года
Ramon
1.1K / / 16.08.2003
А какая разница у размеров строки, посчитанных в символах и в байтах?
278
09 января 2012 года
Alexander92
1.1K / / 04.08.2008
Под символами понимают TCHAR, под байтами - char, соответственно. В такой формулировке все идентично:

[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]
260
09 января 2012 года
Ramon
1.1K / / 16.08.2003
TCHAR

PS: Уже ~30 лет минуло с тех пор, а осознания, что помимо 128 символов существуют иные и их представление так и не пришло, жаль.
278
09 января 2012 года
Alexander92
1.1K / / 04.08.2008
Ramon, вы зря считаете, что я не знаю про "иные представления". :) Если бы не знал, не писал бы предыдущий пост.

P.S. Переформулирую вопрос: неужели вся разница заключается только в том, считать ли длину строки в байтах или в символах? Не вполне понимаю, зачем было так делать, если учесть, что для обеих функций существуют и Ansi-, и Unicode-версия.
20K
12 января 2012 года
sem2711
124 / / 23.09.2009
Цитата: Alexander92
Переформулирую вопрос: неужели вся разница заключается только в том, считать ли длину строки в байтах или в символах? Не вполне понимаю, зачем было так делать, если учесть, что для обеих функций существуют и Ansi-, и Unicode-версия.


Все сделано для того, чтобы разработчик не заморачивался различными версиями функций, а использовал макросы, делающие код универсальным. А считать в байтах или символах - значения ведь разные получатся в ANSI и в UNICODE. Эта функция усекает строку, которая больше по размеру (опять же - в байтах или в символах), чем значение, указанное во втором параметре.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог