![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
Осталось найти "винзип" который использует printf для регистрации
-------------------- |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
У wsprintf есть одна особенность - функция не запихивает в результирующий буфер более 1024 символов. Поэтому можно писать такое:
не опасаясь за переполнение буфера. Однако здесь программиста поджидает неожиданность: при полном заполнении буфера он не будет оканчиваться символом '\0'! Впрочем, поведение аналогичное strncpy. Но в результате корректный код должен быть таким:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Пожалуйста ссылку на пункт в стандарте библиотеки, который это описывает.
|
|||
|
||||
feodorv |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну, про 1024 байта можно почитать здесь:
Про то, что результирующий буфер может и не заканчиваться '\0' - там же:
Можно и провести эксперимент:
Результат:
Аналогично ведут себя _sn...printf... - функции, только возвращают -1. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||||
|
|||||||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
msdn к стандарту не имеет особо отношения.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Что же. Давайте программировать только по стандарту и стандартизированным вызовами ![]() А wsprintf таки пишет завершающий '\0' при полном заполнении буфера на 1024 байта, но только как 1025 байт... Итого:
есть правильный код ![]() Это сообщение отредактировал(а) feodorv - 3.5.2012, 23:30 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Я прошу прощения, если здесь нельзя писать не о сишных функциях. PS Мне вот интересно стало, а флагманский продукт, продвигаемый автором топика, тоже только на чистый С/C++ настроен (хотя и работает исключительно в виндах и совместно с майкрософтовским продуктом), или всё-таки учитывает виндовую спицифику?)))) Это сообщение отредактировал(а) feodorv - 4.5.2012, 00:43 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |