读取ini配置文件时,成员变量的内存数据被隐式修改了

//头文件里连续声明两个WORD变量(内存连续)
WORD m_wRecvValue1;
WORD m_wRecvValue2;


//初始化为255
m_wRecvValue1=255;
m_wRecvValue2=255;


//从配置文件读取数据
TCHAR OutBuf[255];
TCHAR szFileName[255];


memset(OutBuf, 0, sizeof(OutBuf));
GetPrivateProfileString("AppName","KeyName","1",OutBuf,255,szFileName); //假设读取失败,使用默认值
_snscanf(OutBuf,strlen(OutBuf),"%d",&m_wRecvValue1); //执行完此行,wRecvValue2就会被改为0,而不是初始化的255了.


//因为_snscanf会严格按照指定格式%d(4字节)来赋值,而wRecvValue1只占2个字节
//所以会继续覆盖后面的2个字节,即wRecvValue2的位置


//(默认值1=0x00000001,在内存中是从低到高排列,即01 00 00 00.)
//当_snscanf从m_wRecvValue1的首地址开始输入数据时,先取内存值01 00对应的0x0001(2字节)输入给了m_wRecvValue1,则m_wRecvValue1=1
//再继续取后面内存值00 00对应的0x0000(2字节)输入给了m_wRecvValue2,则m_wRecvValue2=0,到此4个字节输入完毕。


//解决方法:
m_wRecvValue1 = GetPrivateProfileInt("AppName","KeyName",1,szFileName);


总结:
读取ini文件时,基本数据使用GetPrivateProfileInt读取;字符串使用GetPrivateProfileString读取。防止内存数据被隐式修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值