Share via


vprintf 函数

每个 vprintf 函数采用指向参数列表的指针,然后规定并写入给定数据到特定目标。 函数与参数验证执行不一样,不论函数是采用宽或单字节字符串,输出目标和用于指定参数中顺序的支持都是用于格式字符串。

_vcprintf, _vcwprintf

vfprintf, vfwprintf

_vfprintf_p、_vfprintf_p_l、_vfwprintf_p、_vfwprintf_p_l

vfprintf_s、_vfprintf_s_l、vfwprintf_s、_vfwprintf_s_l

vprintf, vwprintf

_vprintf_p、_vprintf_p_l、_vwprintf_p、_vwprintf_p_l

vprintf_s、_vprintf_s_l、vwprintf_s、_vwprintf_s_l

vsprintf, vswprintf

_vsprintf_p、_vsprintf_p_l、_vswprintf_p、_vswprintf_p_l

vsprintf_s、_vsprintf_s_l、vswprintf_s、_vswprintf_s_l

_vscprintf、_vscprintf_l、_vscwprintf、_vscwprintf_l

_vsnprintf, _vsnwprintf

备注

vprintf 函数与如下表列出的其对等函数相似。 但是,每个 vprintf 函数接受一个指向参数列表的指针,而每个相似函数接受一个参数列表。

这些功能格式格式数用于输出到如下目标。

功能

复制函数

输出目标

参数验证

位置参数支持

_vcprintf

_cprintf

控制台

空的检查。

no

_vcwprintf

_cwprintf

控制台

空的检查。

no

vfprintf

fprintf

空的检查。

no

vfprintf_p

fprintf_p

空和有效格式的检查。

yes

vfprintf_s

fprintf_s

空和有效格式的检查。

no

vfwprintf

fwprintf

空的检查。

no

vfwprintf_p

fwprintf_p

空和有效格式的检查。

yes

vfwprintf_s

fwprintf_s

空和有效格式的检查。

no

vprintf

printf

Stdout

空的检查。

no

vprintf_p

printf_p

Stdout

空和有效格式的检查。

yes

vprintf_s

printf_s

Stdout

空和有效格式的检查。

no

vwprintf

wprintf

Stdout

空的检查。

no

vwprintf_p

wprintf_p

Stdout

空和有效格式的检查。

yes

vwprintf_s

wprintf_s

Stdout

空和有效格式的检查。

no

vsprintf

sprintf

内存通过 缓冲区指向

空的检查。

no

vsprintf_p

sprintf_p

内存通过 缓冲区指向

空和有效格式的检查。

yes

vsprintf_s

sprintf_s

内存通过 缓冲区指向

空和有效格式的检查。

no

vswprintf

swprintf

内存通过 缓冲区指向

空的检查。

no

vswprintf_p

swprintf_p

内存通过 缓冲区指向

空和有效格式的检查。

yes

vswprintf_s

swprintf_s

内存通过 缓冲区指向

空和有效格式的检查。

no

_vscprintf

_vscprintf

内存通过 缓冲区指向

空的检查。

no

_vscwprintf

_vscwprintf

内存通过 缓冲区指向

空的检查。

no

_vsnprintf

_snprintf

内存通过 缓冲区指向

空的检查。

no

_vsnwprintf

_snwprintf

内存通过 缓冲区指向

空的检查。

no

argptr 参数的类型为 va_list,在 VARARGS.H 和 STDARG.H. 定义。 argptr 变量必须由va_start, 初始化,然后可能由后续的va_arg 调用重新初始化;然后 argptr 指向参数列表的开头,该参数用于根据 格式 参数对应规范的输出转换和传输。 格式 具有和 printf格式 参数相同的窗体和函数。 这些函数没有调用 va_end。 有关每个 vprintf 函数的完整说明,请参阅上表列出的其相关函数的说明。

_vsnprintfvsprintf 不同因为它不仅仅把 计数 字节写入到 缓冲区

名称中含 w中缀的函数版本是没有w中缀的对应函数的宽字符版本;缓冲区格式 是宽字符字符串。 否则,每个宽字符函数与其SBCS 对等的函数表现相同。

这些含 _s 以及 _p 后缀函数版本安全性更高。 这些版本验证格式字符串并将生成异常,如果格式字符串没有形成 (例如,如果无效的格式字符被使用)。

这些含**_p** 后缀的函数版本提供能够指定在格式字符串中被替换的给定参数的顺序。 有关详细信息,请参阅printf_p 位置参数

如果复制出现在重叠的字符串之间,对于vsprintfvswprintf_vsnprintf_vsnwprintf,这些行为不确定。

安全说明安全说明

确保格式不是用户定义的字符串。有关更多信息,请参见避免缓冲区溢出。如果使用这些函数的安全版本( _s_p 后缀),则用户提供的格式字符串可以触发无效的参数异常,如果用户提供的字符串包含无效的格式字符。

请参见

参考

流 I/O

fprintf、_fprintf_l、fwprintf、_fwprintf_l

printf、_printf_l、wprintf、_wprintf_l

sprintf、_sprintf_l、swprintf、_swprintf_l、__swprintf_l

va_arg、va_copy、va_end、va_start