strcpy_s为何有陷阱?

LoveBoydan 2010-05-11 05:55:01
strcpy_s拷贝字符串时,会往缓冲区多多余的字节进行填充,填充的值还不是0
例如:
char name[32];
memset(name, 0, 32);
strcpy_s(name, 32, "rare");
在我的PC上,第0~4个字节分别为字符'r','a','r','e','\0'
第5~31个字节分别被填充为254(ascii码值)
请问各路高手,这怎么解释?
...全文
343 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
TANG_XIAO_BIN 2010-05-11
  • 打赏
  • 举报
回复
方便调试,你换release版编译
qifa 2010-05-11
  • 打赏
  • 举报
回复
MSDN:
The debug versions of these functions first fill the buffer with 0xFD.

debug状态下strcpy_s, wcscpy_s, _mbscpy_s 会根据调用者提供的buffer长度自动用0XFD填充buffer
这样的用意, 我估计和初期查找缓冲区溢出有些好处
oldn123 2010-05-11
  • 打赏
  • 举报
回复
这个问题需要解释什么呢,strcpy_s第二个参数应该是你buffer的长度,而明明你的buffer只是5个字节长,你非说你的字节长32,这样的话相当于你strcpy_s的用法本身就不对,基于一种错误用法的前题去解释后面发生的没有意义
yzcurry 2010-05-11
  • 打赏
  • 举报
回复
这个跟编译器有关系
hzy694358 2010-05-11
  • 打赏
  • 举报
回复
呵呵,不知道
不知道为什么后面会填充那些值
不过作为字符串,遇到了'\0'就结束了
zyq5945 2010-05-11
  • 打赏
  • 举报
回复
'\0'结尾的字符串你关心后面的字符做啥?!
liruda 2010-05-11
  • 打赏
  • 举报
回复
这个问微软才知道吧?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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