scanf引起的内存越界问题

本文介绍了一个关于使用sscanf_s函数处理日期时间字符串时遇到的内存越界问题。原因在于BYTE类型变量与%d格式化之间的不匹配导致内存溢出。通过将BYTE类型变量更改为int类型解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题代码如下:

BYTE nYear=0, nMonth=0, nDate=0, nHour=0, nMin=0, nSec=0;  
sscanf_s("2016-08-12 13:14:15", "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);

运行后,VS2010提示

Run-Time Check Failure #2 - Stack around the variable 'nSec' was corrupted.

后面检查发现原因是变量的类型为BYTE占1个字节,而scanf格式化为%d为4个字节,因此读入的时候会导致内存越界,那如何解决呢?

想了一下换成%c吧,不行,因为不是1个字符,网上查了一下使用%hhu代表unsigned char类型,但VS2010好像无效

于是只能把变量的BYTE类型改为int了,问题解决。

int nYear=0, nMonth=0, nDate=0, nHour=0, nMin=0, nSec=0;  
sscanf_s("2016-08-12 13:14:15", "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值