QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码
查看: 214|回复: 1

[学习笔记] 《Windows SDK》009 安全的使用字符串

[复制链接]
最佳答案
175 
累计签到:154 天
连续签到:3 天
发表于 2017-7-10 14:17:48 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 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,只是功能改为将第三个参数中的字符串拷贝到第一个参数中


三 示例
    比较常用的用于判定字符串操作的代码如下
  1. if (SUCCEEDED(StringCchCat(szTargetBuffer, 256, szSequentBuffer)))
  2.         //do something
  3. else
  4.         //do other thing
复制代码


评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
小甲鱼 + 3 + 3 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
162 
累计签到:2236 天
连续签到:7 天
发表于 2017-7-10 18:12:25 | 显示全部楼层
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /3 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-11-20 03:28

快速回复 返回顶部 返回列表