sprintf_s 在release下崩溃

我将项目中的sprintf换成sprintf_s,以为这样的话程序在字符串格式化时就安全了,结果在实际环境中程序还是崩溃了,百思不得其解。

自己在VS中尝试了这样的代码:

char buf[5] = { 0 };
const char *p = "123456";
sprintf_s(buf, 5, "%s", pp);

本以为是buf中应该是1234,实际上不是这样的,程序直接就崩溃掉了。

查询MSDN才知道:

sprintf_s takes a length parameter specifying the size of the output
buffer in characters. If the buffer is too small for the formatted
text, including the terminating null, then the buffer is set to an
empty string by placing a null character at buffer[0], and the invalid
parameter handler is invoked. Unlike _snprintf,

译文:sprintf_s使用一个长度参数指定(以字符为单位的)输出buffer的大小。如果buffer(包括结束符null)太小,则通过设置buffer[0]为null字符将buffer设置为空字符串,并调用无效参数处理程序。与_snprintf不同。

就是说使用sprintf_s,如果buffer(包括结束符null)太小,会调用无效参数处理程序,需要使用_snprintf_s来代替sprintf_s

char buf[5] = { 0 };
const char *pp = "123456";
_snprintf_s(buf, 5, _TRUNCATE, "aa:%s", pp);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++老师机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值