StringCchPrintf
函数功能: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. 缓冲区大小
2. 应该设置足够大,以容纳字符串和结束标记('\n')
3. 最大允许的字符数是 STRSAFE_MAX_CCH
pszFormat 1. 格式化字符串
2. 与 pirntf 的格式化字符串一致
... 可变参数,参数的个数取决 pszFormat 参数
返回值:
这个函数返回一个 HRESULT,而不是像 sprintf 一样返回存储在其目标缓冲区的字节数。我们强烈建议您使用 SUCCEEDED 和 FAILED 宏来测试这个函数的返回值。
返回值可以是以下任意一个值:
返回代码描述
S_OK 表示有足够的空间将拷贝到 pszDest,没有发生截断
STRSAFE_E_INVALID_PARAMETER cchDest 的值为 0 或大于 STRSAFE_MAX_CCH
STRSAFE_E_INSUFFICIENT_BUFFER 1. 由于缓冲区空间不足而导致的复制失败
2. 结果被截断,当仍然包含'\0'结尾
3. 如果截断操作可以被接受,则不一定被看作是失败
备注:
使用 StringCchPrintf 函数需要添加头文件:strsafe.h
【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。
代码演示:
#include "strsafe.h"
......
TCHAR pszDest;
size_t cchDest = 30;
LPCTSTR pszFormat = TEXT("从你家到鱼C工作室需要 %f 公里!");
HRESULT hr = StringCchPrintf(pszDest, cchDest, pszFormat, 123.45);
......
WinSDK 甲鱼 辛苦了O(∩_∩)O哈! 支持了 。。。。。 辛苦了 1>8052.obj : error LNK2019: 无法解析的外部符号 _StringCchLength,该符号在函数 _WndProc@16 中被引用
1>8052.obj : error LNK2019: 无法解析的外部符号 _StringCchPrintf,该符号在函数 _WndProc@16 中被引用
请问坛主这是什么原因,我照你视频敲的。 参数解析中cchDest第二条结束标记应为‘\0'吧? 感谢小甲鱼老师 cchDest的第二条,应设置得足够大,以容纳字符串和结束标记(' \n '),结束标记貌似应该是(' \0 ')吗? bevinilove 发表于 2014-8-6 01:18
1>8052.obj : error LNK2019: 无法解析的外部符号 _StringCchLength,该符号在函数 _WndProc@16 中被引用
...
解决了吗,怎么解决的?我也遇到这问题 了 {:5_107:} {:5_91:} 学习 努力{:9_230:} {:9_232:}
页:
[1]