相关文章推荐
风流倜傥的葡萄酒  ·  Adobe Photoshop CS5_百度百科·  10 月前    · 
勤奋的鸭蛋  ·  官网首页- 和平精英-官方网站-腾讯游戏·  1 年前    · 
谦和的冲锋衣  ·  《神探狄仁杰》大案都发生在今天什么地方? ...·  1 年前    · 
霸气的书签  ·  广州站和广州北站是一个站吗_车主指南·  1 年前    · 
强健的皮带  ·  到底什么是嘻哈!什么是嘻哈文化!·  1 年前    · 
小百科  ›  C、C++语言高危,高风险函数、内存流往(一)-腾讯云开发者社区-腾讯云
缓存服务器 char char函数 memset函数
强健的土豆
1 年前
作者头像
震八方紫面昆仑侠
0 篇文章

C、C++语言高危,高风险函数、内存溢出(一)

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > MySQL从删库到跑路 > C、C++语言高危,高风险函数、内存溢出(一)

C、C++语言高危,高风险函数、内存溢出(一)

作者头像
震八方紫面昆仑侠
发布 于 2020-07-23 11:36:20
1.6K 0
发布 于 2020-07-23 11:36:20
举报

1.gets - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用char*fgets(char *dest ,int n, stdin);

前提是,我们必须清楚n必须小于dest的大小,以保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

fgets(dest,MAX_SIZE-1,stdin);

......

2._getws - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用wchar_t*fgetws(wchar_t *dest ,int n, stdin);

前提是,我们必须清楚n必须小于dest的大小,以保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

wchar_tdest[MAX_SIZE];

wmemset(dest,0,MAX_SIZE);

fgetws(dest,MAX_SIZE-1,stdin);

......

3._getts - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用TCHAR *fgetts(TCHAR *dest ,int n, stdin);

前提是,我们必须清楚n必须小于dest的大小,以保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

TCHAR dest[MAX_SIZE];

memset(dest,0,MAX_SIZE*sizeof(TCHAR));

fgetts(dest,MAX_SIZE-1,stdin);

......

4.strcpy - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用char*strncpy(char *dest, const char *src, size_t n);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

......

memset(dest,0,MAX_SIZE);

strncpy(dest,src,MAX_SIZE-1);

......

5.lstrcpy - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用LPTSTRlstrcpyn(LPTSTR dest, LPCTSTR src, int n);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度.另外请注意函数lstrcpyn会自动在第n-1位填充0,无论第n-1位是否还有有效数据.

例子:

......

char dest[MAX_SIZE];

......

lstrcpyn(dest,src,MAX_SIZE);

......

6.lstrcpyA - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用LPTSTRlstrcpyn(LPTSTR dest, LPCTSTR src, int n);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度.另外请注意函数lstrcpyn会自动在第n-1位填充0,无论第n-1位是否还有有效数据.

例子:

......

char dest[MAX_SIZE];

......

lstrcpyn(dest,src,MAX_SIZE);

......

7.lstrcpyW - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用wchar_t*wcsncpy(wchar_t *dest, const wchar_t *src,size_t n);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.

例子:

......

wchar_tdest[MAX_SIZE];

......

wmemset(dest,0,MAX_SIZE);

wcsncpy(dest,src,MAX_SIZE-1);

......

8.wcscpy - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用wchar_t*wcsncpy(wchar_t *dest, const wchar_t *src,size_t n);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.

例子:

......

wchar_tdest[MAX_SIZE];

......

wmemset(dest,0,MAX_SIZE);

wcsncpy(dest,src,MAX_SIZE-1);

......

9._tcscpy - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用TCHAR*tcsncpy(TCHAR *dest, const TCHAR *src, size_tn);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.

例子:

......

TCHAR dest[MAX_SIZE];

......

memset(dest,0,MAX_SIZE*sizeof(TCHAR));

tcsncpy(dest,src,MAX_SIZE-1);

......

10._ftcscpy - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用char*_ftcsncpy(char* dest,const char* src, unsignedint n);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

......

memset(dest,0,MAX_SIZE);

_ftcsncpy(dest,src,MAX_SIZE-1k);

......

11.StrCpy - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用char*strncpy(char *dest, const char *src, size_t n);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

......

memset(dest,0,MAX_SIZE);

strncpy(dest,src,MAX_SIZE-1);

......

12.strcat - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用char*strncat(char *dest , const char *src,size_t n);

前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

......

strncat(dest,src,MAX_SIZE-strlen(dest)-1);

......

13.wcscat - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用wchar_t*wcsncat(wchar_t *dest, const wchar_t *src,size_t n);

前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

wchar_tdest[MAX_SIZE];

wmemset(dest,0,MAX_SIZE);

......

wcsncat(dest,src,MAX_SIZE-wcslen(dest)-1);

......

14._mbscat - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用unsigned char* _mbsncat(unsigned char*dest,constunsigned char* src, size_t n);

前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.

例子:

......

unsigned char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

......

_mbsncat(dest,src,MAX_SIZE-strlen(dest)-1);

......

15._tcscat - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用char*_tcsncat(char *dest , const char *src,size_t n);

前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

......

_tcsncat(dest,src,MAX_SIZE-strlen(dest)-1);

......

16.StrCat - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用char*strncat(char *dest , const char *src,size_t n);

前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

......

strncat(dest,src,MAX_SIZE-strlen(dest)-1);

......

17.StrCatA - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用char*strncat(char *dest , const char *src,size_t n);

前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

......

strncat(dest,src,MAX_SIZE-strlen(dest)-1);

......

18.StrCatW - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用wchar_t*wcsncat(wchar_t *dest, const wchar_t *src,size_t n);

前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

wchar_t dest[MAX_SIZE];

wmemset(dest,0,MAX_SIZE);

......

wcsncat(dest,src,MAX_SIZE-wcslen(dest)-1);

......

19.sprintf - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用int _snprintf(char *dest,size_t n, const char*format[,argument...]);

前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

_snprintf(dest,MAX_SIZE-1,formatstring,args);

......

20.wsprintf - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用intwnsprintf(LPTSTR dest ,int n, LPCTSTR pszFmt);

前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

wnsprintf(dest,MAX_SIZE-1,pszFmt);

......

21.wsprintfA - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用intwnsprintf(LPTSTR dest ,int n, LPCTSTR pszFmt);

前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

wnsprintf(dest,MAX_SIZE-1,pszFmt);

......

22.wsprintfW - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用intwnsprintf(LPTSTR dest ,int n, LPCTSTR pszFmt);

前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

wnsprintf(dest,MAX_SIZE-1,pszFmt);

......

23.vsprintf - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用int_vsnprintf(char *dest ,size_t n, const char*format, va_list argptr);

前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

char dest[MAX_SIZE];

memset(dest,0,MAX_SIZE);

_vsnprintf(dest,MAX_SIZE-1,formatstring,args);

......

24.vswprintf - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用int_vsnwprintf(wchar_t *dest ,size_t n, const wchar_t*format, va_list argptr);

前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

wchar_tdest[MAX_SIZE];

wmemset(dest,0,MAX_SIZE);

_vsnwprintf(dest,MAX_SIZE-1,formatstring,args);

......

25.swprintf - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用int_snwprintf(wchar_t *dest ,size_t n, const wchar_t*format[,argument...]);

前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

wchar_tdest[MAX_SIZE];

wmemset(dest,0,MAX_SIZE);

_snwprintf(dest,MAX_SIZE-1,formatstring,args);

......

26._stprintf - 高风险

危险:

它没有安全检查措施,很容易导致缓冲区溢出.

建议:

可以考虑使用int_sntprintf(TCHAR *dest ,siez_t n,const TCHAR*format[,argument...]);

前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.

例子:

......

TCHAR dest[MAX_SIZE];

memset(dest,0,MAX_SIZE*sizeof(TCHAR));

_sntprintf(dest,MAX_SIZE-1,pszFmt);

......

本文参与 腾讯云自媒体分享计划 ,分享自微信公众号。
原始发表:2020-01-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除
编程算法
缓存

本文分享自 MySQL从删库到跑路 微信公众号, 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

编程算法
缓存
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
关于作者
震八方紫面昆仑侠
0
文章
0
累计阅读量
0
获赞
前往专栏
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
风流倜傥的葡萄酒  ·  Adobe Photoshop CS5_百度百科
10 月前
勤奋的鸭蛋  ·  官网首页- 和平精英-官方网站-腾讯游戏
1 年前
谦和的冲锋衣  ·  《神探狄仁杰》大案都发生在今天什么地方? 5926字l 地缘谷- 知乎
1 年前
霸气的书签  ·  广州站和广州北站是一个站吗_车主指南
1 年前
强健的皮带  ·  到底什么是嘻哈!什么是嘻哈文化!
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号