Функция wsprintf форматирует и хранит ряд символов и значений в буфере. Любые параметры преобразуются и копируются в буфер выводимых данных согласно соответствующей спецификации формата в форматируемой строке. Функция добавляет в конец символ завершающего нуля к символам, которые она пишет, но в возвращаемом значении она не включает его в число символов.
int wsprintf( LPTSTR lpOut, LPCTSTR lpFmt, ... ); |
[out] Указатель на буфер, который получит форматированный вывод данных. Максимальный размер буфера составляет 1024 байта.
lpFmt[in] Указатель на строку с завершающим нулем, которая содержит в себе спецификации управления форматом. В дополнение к обычным символам ASCII спецификация формата для каждого параметра показывается в этой строке. Для получения дополнительной информации о спецификация формата см. раздел Замечаний.
...[in] Указывает один или несколько дополнительных параметров. Число и тип характеристик параметра зависят от соответствующих спецификаций управления форматом в параметре lpFmt.
Если функция завершается успешно, возвращаемое значение - число символов, сохраненных в буфере выводимых данных, не считая символ завершающего нуля.
Если функция завершается ошибкой, возвращаемое значение меньше, чем длина ожидаемого вывода данных. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Предупреждение защиты! Используя эту функцию неправильно можно поставить под угрозу обеспечение безопасности Вашего приложения. Строка, возвращенная в lpOut, не гарантирована от того, что будет ЗАВЕРШЕНА СИМВОЛОМ КОНЦА СТРОКИ ('\0'). Кроме того, избегайте формата %s - он может привести к переполнению буфера. Если происходит нарушение прав доступа, оно служит причиной отказа от обслуживания опираясь на Ваше приложение. В худшем случае, взломщик защиты может вставить исполняемый код. Рассмотрите один из вариантов использования нижеследующих альтернативных функций: StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintf или StringCchVPrintfEx. Вы должны рассмотреть перед продолжением Вопросы обеспечения безопасности: Пользовательский интерфейс Windows. |
Строка управления форматом содержит спецификации формата, которые определяют формат вывода данных для параметров после lpFmt параметра. Спецификации формата, обсужденные ниже, всегда начинаются со знака процента (%). Если знак процента сопровождается символом, у которого нет никакого значения как поля формата, символ не форматирующий (например, %% создает единичный символ знака процента).
Строка управления форматом читается слева направо. Когда первая спецификация формата (если она есть) встречается, она заставляет значение первого параметра после строки управления форматом быть преобразованным и скопированным в буфер выводимых данных согласно спецификации формата. Вторая спецификация формата заставляет второй параметр быть преобразованным и скопированным, и так далее. Если имеется больше параметров, чем в спецификации формата, дополнительные параметры игнорируются. Если имеется недостаточно параметров для всех спецификаций формата, результаты не определяются.
У спецификации формата - нижеследующая форма:
%[-][#][0][width][.precision]type |
Каждое поле - единичный символ или число, показывающее конкретный вариант выбора формата. Символы типа, которые показываются после последнего дополнительного поля формата, определяют, понимается ли связанный параметр как символ, строка, или число. Самая простая спецификация формата содержит в себе только знак процента и символ типа (например, %s). Дополнительные поля управляют другими аспектами форматирования. Ниже - дополнительные и требуемые поля и их значения.
Поле |
Предназначение |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
– | Дополняет вывод данных пробелами или нулями справа, чтобы заполнить ширину поля, выравнивая вывод налево. Если это поле пропускается, вывод дополняется налево, выравнивая его вправо. | ||||||||||||||||||||||||||||||||||||||||
# | Префикс шестнадцатеричного значения 0x (нижний регистр) или 0X (верхний регистр). | ||||||||||||||||||||||||||||||||||||||||
0 | Дополняет выходное значение нулями, чтобы заполнить ширину поля. Если это поле пропускается, выходное значение дополняется пробелами. | ||||||||||||||||||||||||||||||||||||||||
width | Копирует указанное минимальное число символов в буфер выводимых данных. Поле width - неотрицательное целое число. Спецификация ширины никогда не заставляет значение обрезаться; если число символов в выходном значении больше, чем указанная ширина, или, если поле width отсутствует, все значения печатаемых символов подчинены спецификации точности. | ||||||||||||||||||||||||||||||||||||||||
.precision | Для чисел, скопируйте указанное минимальное число цифр в буфер выводимых данных. Если число цифр в параметре меньше, чем указанная точность, выходное значение дополняется слева с нулями. Значение не обрезается, когда число цифр выходит за пределы указанной точности. Если указанная точность 0 или не включена полностью, или если точка (.) показывается без числа после нее, точность устанавливается в 1. | ||||||||||||||||||||||||||||||||||||||||
Для строк, скопируйте указанное максимальное число символов в буфер выводимых данных. | |||||||||||||||||||||||||||||||||||||||||
type | Выведите соответствующий параметр как символ, строку, или число. Это поле может быть любым из нижеследующих значений.
|
Обратите внимание! Это важно! на то, что wsprintf, использует соглашение о вызовах C (_cdecl), а не стандартный вызов (_stdcall). В результате этого - ответственность вызываемого процесса извлечь из стека параметры из стека и поместить параметры в стек справа налево. В C-языковых модулях компилятор C выполняет эту задачу. |
Чтобы использовать буфера, большие, чем 1024 байта, используйте функцию _snwprintf. Для получения дополнительной информации, см. документацию для библиотеки исполняющей системы C.
Пример смотри в статье Чтение из почтового слота.
Обзор Строки, Функции, используемые строками, StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintf, StringCchVPrintfEx, wvsprintf
Размещение и совместимость wsprintf |
||
К | Windows XP | Да |
л | Windows 2000 Professional | Да |
и | Windows NT Workstation | Да версии 3.1 |
е | Windows Me | Да |
н | Windows 98 | Да |
т | Windows 95 | Да |
С | Windows Server 2003 | Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да версии 3.1 |
в | ||
е | ||
р | ||
Используемая библиотека | User32.lib | |
Используемая DLL | user32.dll | |
Заголовочный файл | ||
- объявлено в | Winuser.h | |
- включено в | Windows.h | |
Unicode | Реализуются как версии Unicode и ANSI. | |
Замечания по платформе | Не имеется |