函数功能:
StringCchPrintf 函数用于把数据格式化写入到指定的缓冲区里,该函数要求提供目标缓冲区的大小,确保不会发生越界访问。
微软推荐使用该函数替代以下函数:
- sprintf, swprintf, _stprintf
- wsprintf
- wnsprintf
- _snprintf, _snwprintf, _sntprintf
API 函数原型:
HRESULT StringCchPrintf( _Out_ LPTSTR pszDest, _In_ size_t cchDest, _In_ LPCTSTR pszFormat, _In_ ... );
参数解析:
|
参数 |
含义 |
|
pszDest |
指定格式化数据将要写入的缓冲区 |
|
cchDest |
1. 缓冲区大小 |
|
pszFormat |
1. 格式化字符串 |
|
... |
可变参数,参数的个数取决 pszFormat 参数 |
返回值:
这个函数返回一个 HRESULT,而不是像 sprintf 一样返回存储在其目标缓冲区的字节数。我们强烈建议您使用 SUCCEEDED 和 FAILED 宏来测试这个函数的返回值。
返回值可以是以下任意一个值:
|
返回代码 |
描述 |
|
S_OK |
表示有足够的空间将拷贝到 pszDest,没有发生截断 |
|
STRSAFE_E_INVALID_PARAMETER |
cchDest 的值为 0 或大于 STRSAFE_MAX_CCH |
|
STRSAFE_E_INSUFFICIENT_BUFFER |
1. 由于缓冲区空间不足而导致的复制失败 |
备注:
使用 StringCchPrintf 函数需要添加头文件:strsafe.h
代码演示:
#include "strsafe.h"
......
TCHAR pszDest[30];
size_t cchDest = 30;
LPCTSTR pszFormat = TEXT("从你家到鱼C工作室需要 %f 公里!");
HRESULT hr = StringCchPrintf(pszDest, cchDest, pszFormat, 123.45);
......




