小甲鱼 发表于 2014-7-19 16:36:11

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

牡丹花下死做鬼 发表于 2014-7-19 16:48:39

甲鱼 辛苦了O(∩_∩)O哈!

Angel丶L 发表于 2014-7-19 17:58:26

支持了 。。。。。

cfy137000 发表于 2014-7-26 22:23:49

辛苦了

bevinilove 发表于 2014-8-6 01:18:04

1>8052.obj : error LNK2019: 无法解析的外部符号 _StringCchLength,该符号在函数 _WndProc@16 中被引用
1>8052.obj : error LNK2019: 无法解析的外部符号 _StringCchPrintf,该符号在函数 _WndProc@16 中被引用

请问坛主这是什么原因,我照你视频敲的。

hfut_wangfei 发表于 2014-12-5 10:24:22

参数解析中cchDest第二条结束标记应为‘\0'吧?

y290176346 发表于 2015-9-15 21:52:21

感谢小甲鱼老师

love_programe 发表于 2016-3-26 15:17:57

cchDest的第二条,应设置得足够大,以容纳字符串和结束标记(' \n '),结束标记貌似应该是(' \0 ')吗?

1120130229 发表于 2016-6-12 12:43:35

bevinilove 发表于 2014-8-6 01:18
1>8052.obj : error LNK2019: 无法解析的外部符号 _StringCchLength,该符号在函数 _WndProc@16 中被引用
...

解决了吗,怎么解决的?我也遇到这问题 了

谦虚求学 发表于 2016-10-24 11:18:17

{:5_107:}

谦虚求学 发表于 2016-10-26 12:26:44

{:5_91:}

一笑见苍穹 发表于 2019-1-29 15:52:34

学习 努力{:9_230:}

1217768996 发表于 2023-5-6 23:50:02

{:9_232:}
页: [1]
查看完整版本: StringCchPrintf