vprintf 函数
每个 vprintf 函数采用指向参数列表的指针,然后规定并写入给定数据到特定目标。 函数与参数验证执行不一样,不论函数是采用宽或单字节字符串,输出目标和用于指定参数中顺序的支持都是用于格式字符串。
备注
vprintf 函数与如下表列出的其对等函数相似。 但是,每个 vprintf 函数接受一个指向参数列表的指针,而每个相似函数接受一个参数列表。
这些功能格式格式数用于输出到如下目标。
功能 |
复制函数 |
输出目标 |
参数验证 |
位置参数支持 |
---|---|---|---|---|
_vcprintf |
控制台 |
空的检查。 |
no |
|
_vcwprintf |
控制台 |
空的检查。 |
no |
|
vfprintf |
流 |
空的检查。 |
no |
|
vfprintf_p |
流 |
空和有效格式的检查。 |
yes |
|
vfprintf_s |
流 |
空和有效格式的检查。 |
no |
|
vfwprintf |
流 |
空的检查。 |
no |
|
vfwprintf_p |
流 |
空和有效格式的检查。 |
yes |
|
vfwprintf_s |
流 |
空和有效格式的检查。 |
no |
|
vprintf |
Stdout |
空的检查。 |
no |
|
vprintf_p |
Stdout |
空和有效格式的检查。 |
yes |
|
vprintf_s |
Stdout |
空和有效格式的检查。 |
no |
|
vwprintf |
Stdout |
空的检查。 |
no |
|
vwprintf_p |
Stdout |
空和有效格式的检查。 |
yes |
|
vwprintf_s |
Stdout |
空和有效格式的检查。 |
no |
|
vsprintf |
内存通过 缓冲区指向 |
空的检查。 |
no |
|
vsprintf_p |
内存通过 缓冲区指向 |
空和有效格式的检查。 |
yes |
|
vsprintf_s |
内存通过 缓冲区指向 |
空和有效格式的检查。 |
no |
|
vswprintf |
内存通过 缓冲区指向 |
空的检查。 |
no |
|
vswprintf_p |
内存通过 缓冲区指向 |
空和有效格式的检查。 |
yes |
|
vswprintf_s |
内存通过 缓冲区指向 |
空和有效格式的检查。 |
no |
|
_vscprintf |
内存通过 缓冲区指向 |
空的检查。 |
no |
|
_vscwprintf |
内存通过 缓冲区指向 |
空的检查。 |
no |
|
_vsnprintf |
内存通过 缓冲区指向 |
空的检查。 |
no |
|
_vsnwprintf |
内存通过 缓冲区指向 |
空的检查。 |
no |
argptr 参数的类型为 va_list,在 VARARGS.H 和 STDARG.H. 定义。 argptr 变量必须由va_start, 初始化,然后可能由后续的va_arg 调用重新初始化;然后 argptr 指向参数列表的开头,该参数用于根据 格式 参数对应规范的输出转换和传输。 格式 具有和 printf的格式 参数相同的窗体和函数。 这些函数没有调用 va_end。 有关每个 vprintf 函数的完整说明,请参阅上表列出的其相关函数的说明。
_vsnprintf 与 vsprintf 不同因为它不仅仅把 计数 字节写入到 缓冲区。
名称中含 w中缀的函数版本是没有w中缀的对应函数的宽字符版本;缓冲区 和 格式 是宽字符字符串。 否则,每个宽字符函数与其SBCS 对等的函数表现相同。
这些含 _s 以及 _p 后缀函数版本安全性更高。 这些版本验证格式字符串并将生成异常,如果格式字符串没有形成 (例如,如果无效的格式字符被使用)。
这些含**_p** 后缀的函数版本提供能够指定在格式字符串中被替换的给定参数的顺序。 有关详细信息,请参阅printf_p 位置参数。
如果复制出现在重叠的字符串之间,对于vsprintf,vswprintf,_vsnprintf 和 _vsnwprintf,这些行为不确定。
安全说明 |
---|
确保格式不是用户定义的字符串。有关更多信息,请参见避免缓冲区溢出。如果使用这些函数的安全版本( _s 或 _p 后缀),则用户提供的格式字符串可以触发无效的参数异常,如果用户提供的字符串包含无效的格式字符。 |
请参见
参考
fprintf、_fprintf_l、fwprintf、_fwprintf_l
printf、_printf_l、wprintf、_wprintf_l