wsprintfA 函数 (winuser.h)

将数据写入指定的缓冲区。 根据格式字符串中的相应格式规范,转换任何参数并将其复制到输出缓冲区。 该函数将终止 null 字符追加到它写入的字符中,但返回值不包括其字符计数中的终止 null 字符。

注释 不使用。 请考虑改用以下函数之一:StringCbPrintfStringCbPrintfExStringCchPrintfStringCchPrintfEx。 请参阅安全注意事项。
 

语法

int WINAPIV wsprintfA(
  [out] LPSTR  unnamedParam1,
  [in]  LPCSTR unnamedParam2,
        ...    
);

参数

[out] unnamedParam1

类型:LPTSTR

要接收格式化输出的缓冲区。 缓冲区的最大大小为 1,024 字节。

[in] unnamedParam2

类型:LPCTSTR

格式控制规范。 除了普通 ASCII 字符外,此字符串中还显示了每个参数的格式规范。 有关格式规范的详细信息,请参阅“备注”部分。

...

一个或多个可选参数。 参数的数量和类型取决于 lpFmt 参数中的相应格式控制规范。

返回值

类型:int

如果函数成功,则返回值是存储在输出缓冲区中的字符数,而不是计算终止 null 字符数。

如果函数失败,则返回值小于预期输出的长度。 若要获取扩展的错误信息,请调用 GetLastError

言论

格式控制字符串包含格式规范,用于确定 lpFmt 参数后面的参数的输出格式。 下面讨论的格式规范始终以百分号(%)开头。 如果百分比符号后跟一个没有意义作为格式字段的字符,则不会设置字符的格式(例如,%% 生成单一百分号字符)。

格式控制字符串从左到右读取。 当遇到第一个格式规范(如果有)时,它会导致格式控制字符串转换后第一个参数的值,并根据格式规范复制到输出缓冲区。 第二个格式规范导致第二个参数转换和复制,依此推。 如果参数多于格式规范,则忽略额外的参数。 如果所有格式规范没有足够的参数,则结果未定义。

格式规范具有以下形式:

%[-][#][0][宽度][.precision]类型

每个字段都是一个字符或一个表示特定格式选项的数字。 类型 字符,这些字符显示在最后一个可选格式字段之后,确定关联的参数是解释为字符、字符串还是数字。 最简单的格式规范仅包含百分比符号和类型字符(例如,%s)。 可选字段控制格式设置的其他方面。 以下是可选字段和必填字段及其含义。

意义
- 将输出用空白或零填充到右侧以填充字段宽度,使输出向左对齐。 如果省略此字段,则输出将填充到左侧,使其右对齐。
# 使用 0x(小写)或 0X(大写)前缀十六进制值。
0 用零填充输出值以填充字段宽度。 如果省略此字段,则输出值用空格填充。
宽度 将指定的最小字符数复制到输出缓冲区。 宽度 字段是非负整数。 宽度规范永远不会导致值被截断;如果输出值中的字符数大于指定的宽度,或者 宽度 字段不存在,则输出值的所有字符都将按照精度规范打印。
.精度 对于数字,请将指定的最小位数复制到输出缓冲区。 如果参数中的位数小于指定的精度,则输出值用零填充在左侧。 当数字数超过指定的精度时,该值不会被截断。 如果指定的精度为 0 或完全省略,或者句点 (.) 显示后没有数字,则精度设置为 1。

对于字符串,请将指定的最大字符数复制到输出缓冲区。

类型 将相应的参数输出为字符、字符串或数字。 此字段可以是以下任何值。
c
单个字符。 此值通过 wsprintfA 解释为类型 CHARwsprintfW 类型 WCHAR。 请注意,wsprintf 是定义为 wsprintfA(未定义 Unicode)或 wsprintfW(已定义的 Unicode)的宏。
C
单个字符。 此值被 wsprintfA 解释为 WCHAR 类型,wsprintfW类型 CHAR。 请注意,wsprintf 是定义为 wsprintfA(未定义 Unicode)或 wsprintfW(已定义的 Unicode)的宏。
d
带符号十进制整数。 此值等效于 i
hchC
单个字符。 如果字符的数值为零,则忽略该字符。 此值始终解释为 CHAR类型 ,即使调用应用程序定义 Unicode 也是如此。
hd
带符号短整数参数。
hshS
字符串。 此值始终解释为类型 LPSTR,即使调用应用程序定义 Unicode 也是如此。
hu
无符号短整数。
i
带符号十进制整数。 此值等效于 d
IxIX
64 位平台上小写或大写的 64 位无符号十六进制整数、32 位无符号十六进制整数(小写或大写形式在 32 位平台上)。
lclC
单个字符。 如果字符的数值为零,则忽略该字符。 此值始终解释为 WCHAR类型 ,即使调用应用程序定义 Unicode 也是如此。
ld
长有符号整数。 此值等效于 li
li
长有符号整数。 此值等效于 ld
lslS
字符串。 此值始终解释为类型 LPWSTR,即使调用应用程序未定义 Unicode 也是如此。 此值等效于 ws
lu
长无符号整数。
lxlX
长无符号十六进制整数(小写或大写)。
p
指针。 该地址是使用十六进制打印的。
s
字符串。 wsprintfAwsprintfWLPWSTR,此值被解释为类型 LPSTR 。 请注意,wsprintf 是定义为 wsprintfA(未定义 Unicode)或 wsprintfW(已定义的 Unicode)的宏。
S
字符串。 此值通过 wsprintfA wsprintfAwsprintfWLPSTR 解释为类型 LPWSTR。 请注意,wsprintf 是定义为 wsprintfA(未定义 Unicode)或 wsprintfW(已定义的 Unicode)的宏。
u
无符号整数参数。
xX
小写或大写的无符号十六进制整数。
 
注意 请务必注意,wsprintf 使用 C 调用约定(_cdecl),而不是标准调用(_stdcall)调用约定。 因此,调用过程负责从堆栈中弹出参数,参数从右向左推送到堆栈。 在 C 语言模块中,C 编译器执行此任务。
 
若要使用大于 1024 字节的缓冲区,请使用 _snwprintf。 有关详细信息,请参阅 C 运行时库的文档。

注意

winuser.h 标头将 wsprintf 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 winuser.h (包括 Windows.h)
User32.lib
DLL User32.dll

另请参阅

概念

参考

StringCbPrintf

StringCbPrintfEx

StringCbVPrintf

StringCbVPrintfEx

StringCchPrintf

StringCchPrintfEx

StringCchVPrintf

StringCchVPrintfEx

字符串

wvsprintf