博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于strcpy的安全函数的选择
阅读量:7095 次
发布时间:2019-06-28

本文共 1223 字,大约阅读时间需要 4 分钟。

1)如果整个程序,在进行字符拷贝时,这个拷贝字符串的完整性,不影响整个程 序的运行,可以让其截取一部分字符串,程序继续执行。那么我们就可以选择安全 函数:strncpy_s

2)如果在进行字符串拷贝时,源字符串不能完整拷贝到目的字符串,会影响整个 程序的运行,那我们就需要终了程序。这样的话,我们就选择安全函数:strcpy_s
所以在选择这两个安全函数时,就要根据需求来进行
以下是自己查资料和写程序验证的一点小总结,共享如下。如果有什么不同见解, 请指出!!
1.strcpy  有bufferOverFlow风险,会破坏内存。
  声明:char *strcpy(char* dest, const char *src);
  功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
  注:dest的空间必须要能够存储src的长度加上NULL字符
2.关于strcpy_s  不会有bufferOverFlow,但是当源串的长度大于目标缓冲区大小 时,会有提示性错误
  声明:strcpy_s(char* dest, size_t numElems, const char* src)
  功能:
  注:第二个参数表示目标缓冲区大小,大于或等于源串的长度+1(存放结束符 /0),strcpy_s必须完全拷贝源串,若只想拷贝一部分源串则应该用strncpy_s函数。
   当源串的长度大于目标缓冲区大小(也就是第二个指定的参数的值),不会发 生overflow,但是会有以下的提示错误:(Release和debug都会提示,只是debug 的提示会更加详细。下面是release的提示)
   問題が発生したため、exeを終了します。ご不便をおかけして申し訳ありません
3.strncpy  有bufferOverFlow风险,会破坏内存
  声明:char *strncpy(char *strDest,const char *strSource,size_t count);
  功能:将strSource的count个字符复制到strDest中,如果count小于或者等于 strSource的长度,
NULL字符就不会自动的加到已经复制的字符串后面;如果count大于strSource的长 度,会用NULL字符来填充到复制的字符串后面使其长度达到count
  可以参考msdn以下地址,里面有例子,自己可以参考运行。
 
4.strncpy_s  能截取一部分字符串,让程序继续运行
  声明:errno_t strncpy_s(char *strDest,size_t numberOfElements,const char *strSource,size_t count);
  功能:请参考: /5dae5d43(v=vs.90).aspx

转载于:https://www.cnblogs.com/honglihua8688/p/3495277.html

你可能感兴趣的文章
三元运算符
查看>>
Oracle管理监控之使用utl_mail自动邮件报警配置
查看>>
使用原生 JavaScript 操作 DOM
查看>>
跟我一起学习VIM - vim插件合集
查看>>
什么是一个人的格局?
查看>>
redgate的mysql架构比较和数据比较工具
查看>>
Spring Security入门(3-6)Spring Security 的鉴权 - 自定义权限前缀
查看>>
JSON-RPC轻量级远程调用协议介绍及使用
查看>>
video_capture模块分析
查看>>
Bmob移动后端云服务平台--Android从零開始--(二)android高速入门
查看>>
免费的UI素材准备
查看>>
Ubuntu设置显示桌面快捷键
查看>>
TabBarController和其他view无法建立Relationship segue的原因
查看>>
C语言中结构体变量之间赋值
查看>>
javascript精度问题与调整
查看>>
《从零開始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式...
查看>>
hdu 3342 Legal or Not (拓扑排序)
查看>>
Dubbo限制大数据传输的解决方案
查看>>
ML学习分享系列(2)_计算广告小窥[中]
查看>>
form怎样正确post文件
查看>>