Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/54: Рейтинг темы: голосов - 54, средняя оценка - 4.89
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444

wsprintf

17.09.2011, 21:02. Показов 10019. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зашёл в MSDN глянуть описание функции wsprintf. И увидел замечание, что функцию лучше не использовать.
Do not use. Consider using one of the following functions instead: StringCbPrintf, StringCbPrintfEx, StringCchPrintf, or StringCchPrintfEx
Кстати, такие замечания я видел возле многих функций. Например,lstrcat
и везде что-то пишут DO NOT USE.
Почему Microsoft их не рекомендует использовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2011, 21:02
Ответы с готовыми решениями:

аналог wsprintf
Я использовал wsprintf чтобы сформировать строку. Я её считал, и хотелось бы её разбить на части, нет ли какой нибудь обратной функции?

Wsprintf функция в MessageBox
char buf; MessageBox(NULL, wsprintf(buf, "%d", GetDeviceCaps(hdc, PLANES)), " ", 0); Что не так ???

Некорректный вывод переменной TextOut после wsprintf
Программа выводит на экран китайские иероглифы на месте преобразованной через wsprintf переменной в TextOut. Причем в предыдущей строке с...

5
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
17.09.2011, 21:47
Там же все и объясняется, что якобы из соображений безопасности:
Неверное использование этой функции может подвергнуть риску безопасность Вашего приложения. Строка возвращенная в lpOut не гарантирует, что закончится нулем. Также следует избегать форматирования с использованием %s, что может стать причиной переполнения буфера с крэшем приложения. В худшем случае атакующий может включить в это исполнимый код. Лучше использовать соответствующие альтернативы...
1
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
18.09.2011, 12:22
Dimarik__ чтобы обезопасить ошибками такими как переполнение буфера, мир согласну языку С все строки заканчиваются нулем, это хорошо если размер строки неизвестен то можно через параметр передавать не фиксированную длинну строки так как копироваться будет до null terminate '\0', вот как раз здесь возникает опасность какой размер был задан для выходного буфера, если размер был меньше указан чем входной буфер-строки, вот вам и переполнение буфера пожалуйста. На данный момент нужно использовать такие функции strcpy_s, strcat_s... ну или писать свои альтернативы на ASM.
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.09.2011, 12:32
использовать эти функции - хороший способ сделать проект непереносимым
0
Исследователь
 Аватар для GrayWolf
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
18.09.2011, 18:04
Цитата Сообщение от xAtom Посмотреть сообщение
На данный момент нужно использовать такие функции strcpy_s, strcat_s...
А если компилятор их не поддерживает? Например, тот же gcc - там их нет.

Цитата Сообщение от alex_x_x Посмотреть сообщение
использовать эти функции - хороший способ сделать проект непереносимым
И как тогда быть, если разрабатывается софт для Windows 2000? Эти функции "начинаются" с XP SP2.

Меня тоже этот вопрос интересует, кстати. Особо хороших альтернатив пока что не нашел.
1
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
19.09.2011, 08:16
Если есть реальный смысл от использования безопасных функций типа ..._s, то добавить их поддержку в проект не столь уж и сложно, тем более, что делать это можно относительно постепенно (в смысле и количества и качества).
Например, в самом "худом" случае, можно просто создать заголовок и добавить определения этих (безопасных) функций, где они будут просто перенаправлять вызовы к обычным (небезопасным) функциям (макросы или инлайн - на любителя). Да, это не эффективно, не красиво и т.д., но быстро и просто.
Далее постепенно можно изменять такие неправильные реализации этих безопасных функций на правильные, списывая код у Microsoft (см. папку ...\VC\crt\src\) или создавая свой собственный.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2011, 08:16
Помогаю со студенческими работами здесь

Wsprintf() выдает Stack Around . bla bla . occured
LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { RECT rect; wchar_t a; switch (message) ...

Wsprintf(RegQueryValueEx)
include '%fasm%\win32wx.inc' section '.code' executable start: invoke RegOpenKeyEx,'HKCU','Console',NULL,KEY_READ,hKEY ...

Вывод через wsprintf
Компилятор не ругается, но ехе не открывается. Подскажите в чём проблема. Компилятор MASM .386 .model flat,stdcall option...

Размер буфера у wsprintf
Здравствуйте ув. форумчане! Есть такой код: invoke wsprintfA, buf, "0x%p", 0xAABBCCDD mov , buf mov eax, ...

wsprintf не работает с float
Пиши калькулятор на Win Api, столкнулся с тем что функция wsprintf не работает с float. Проблема появилась при необходимости делать деление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru