《Windows SDK》009 安全的使用字符串
本帖最后由 BngThea 于 2017-7-15 09:53 编辑一 核心知识点
* 字符串处理
1 可以使用旧的字符串处理函数lstrlen, wprintf, lstrcat, lstrcpy
2 在Windows编程中推荐使用更安全的函数,这些函数都被包含在strsafe.h中
3 上面两者的区别主要在于后者加强了对字符串长度的限定,从而有效的防止溢出漏洞的产生
二 新API函数
* StringCchLength(szBuffer, 128, &iTarget)
该函数获得字符串的长度,不含结尾的'\0'
1该函数从最大128个字符空间中扫描szBuffer字符串的长度,并将结果赋值给iTarget,其中128可以设置为任意无符号整型
2该函数返回一个HRESULT,可以通过SUCCEEDED于判定是否成功
* StringCchPrintf(szBuffer, 128, TEXT("%3d: %s"), i + 1, TEXT("I love FishC.com!"));
该函数将字符串的内容放到缓存中
1 各参数含义:
第一个参数:缓存,用来存放字符串的对象
第二个参数:限定的字符个数,可以为任意无符号整型,但要保证够用
第三个参数:字符串格式
随后的参数:字符串内容
2 上述语句结果:将行号 + I love FishC.com! 存放到szBuffer中
3 该函数可以响应浮点数类型数据(wsprintf不能)
4 该函数返回一个HRESULT,可以通过SUCCEEDED于判定是否成功
* StringCchCat(szTargetBuffer, 256, szSequentBuffer)
该函数将两个字符串拼接起来
1 各参数含义:
第一个参数:目标缓存,将存放拼接后的字符串
第二个参数:限定的字符个数,可以为任意无符号整型,但要保证够用
第三个参数:被拼接到后面的字符串
2 上述语句结果:将第一个参数和第三个参数的内容拼接起来,并存放到第一个参数中
3 该函数应保证第二个参数足以放下两个字符串的长度+1(结尾'\0')
4 该函数返回一个HRESULT,可以通过SUCCEEDED于判定是否成功
* StringCchCopy(szTargetBuffer, 256, szBuffer)
该函数使用基本同StringCchCat,只是功能改为将第三个参数中的字符串拷贝到第一个参数中
三 示例
比较常用的用于判定字符串操作的代码如下if (SUCCEEDED(StringCchCat(szTargetBuffer, 256, szSequentBuffer)))
//do something
else
//do other thing
不错,整理的挺好~ +1
页:
[1]