您的位置:首页 > 其它

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

2012-12-15 16:14 681 查看
//头文件里连续声明两个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读取。防止内存数据被隐式修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: