strcpy_s作用?

笨小鸟 2011-06-27 08:48:20
strcpy_s有什么用?好像超过提供的缓冲区大小,debug状态下弹个对话框告诉你缓冲区太小,release版本程序直接没有了,用异常处理根本不能捕获。不知道微软搞这个到底干什么的。
...全文
1372 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yfkiss 的回复:]

它和strcpy()函数的功能应该一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。
这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。

strcpy_s函数可以进行运行时检查,以确定写入的字符没有超过目标缓冲区的边……
[/Quote]
++
笨小鸟 2011-06-28
  • 打赏
  • 举报
回复
还是不太清楚微软搞这个东西做什么用,我猜想它怕黑客利用缓充区溢出攻击windows,现在这个样子只要一溢出马上程序就结束看你怎么搞,不知道我说的对不对
TimZhuFaith 2011-06-28
  • 打赏
  • 举报
回复
safe strcpy
笨小鸟 2011-06-28
  • 打赏
  • 举报
回复
顶一下!
笨小鸟 2011-06-28
  • 打赏
  • 举报
回复
微软摊子大啊
5t4rk 2011-06-27
  • 打赏
  • 举报
回复
说白了就是一回事
函数名给了宏定义的
其实你可以看看系统的相关头文件


#if __STDC_WANT_SECURE_LIB__
#define _CRT_SECURE_STRCPY(dest, destsize, source) ::strcpy_s((dest), (destsize), (source))
#else
#define _CRT_SECURE_STRCPY(dest, destsize, source) ::strcpy((dest), (source))
#endif
笨小鸟 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yfkiss 的回复:]
它和strcpy()函数的功能应该一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。
这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。

strcpy_s函数可以进行运行时检查,以确定写入的字符没有超过目标缓冲区的边界……
[/Quote]
它默认的行为是抛出一个访问冲突来终止应用程序。这非常好的实现了让你的应用程序持续运行,而不会产生不可预期的结果。
这个怎么解释呢?好像不能用异常捕获啊,这个让用户怎么处理呢?到最后还不是异常终止了吗?
sea_spray 2011-06-27
  • 打赏
  • 举报
回复
你要是用VS2003的话可以使用strcpy,但是你要是使用VS2008以上的话,就要使用strcpy_s了,要不会报错,其实俩函数效果是一样的~~~~
lifesider 2011-06-27
  • 打赏
  • 举报
回复
微软提供的安全函数系列之一,就是在DEBUG下进行源和目标的缓冲区大小检测,Release下跟strcpy函数是一样的
其它带_s后缀的函数都是一样的意思,表示安全(safe)函数
yfk 2011-06-27
  • 打赏
  • 举报
回复
它和strcpy()函数的功能应该一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。
这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。

strcpy_s函数可以进行运行时检查,以确定写入的字符没有超过目标缓冲区的边界。还有一些其它的检查方法来确定参数的有效性。在调试版本中这些检测方法,包括显示调试报告的"断言"(assertions)方法,如果它们的条件没有满足,它们将显示调试报告。无论是调试还是发行版本,如果一个特定的条件没有得到满足,一个无效的参数管理器将被调用,它默认的行为是抛出一个访问冲突来终止应用程序。这非常好的实现了让你的应用程序持续运行,而不会产生不可预期的结果。当然,这种情况完全可以通过确保类似于strcpy_s的函数不调用无效参数来避免。

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧