【MFC】问题:在定义的结构体中加入CString会报错?

【MFC】问题:在定义的结构体中加入CString会报错?

问题描述

在项目开发的时候,想要在结构体中定义一个CString,用来存放从配置文件中读取的字符串数据。但是一旦执行到该参数读取时,编译器便会弹出报错。

//定义的结构体
typedef struct READ_INICONFIG
{
	int			nPage;
	char		szFileName[20];
	CString		strFileProperty;
}READINICONFIG;

代码举例:

//定义的结构体
READ_INICONFIG FileConfig;
//正常
FileConfig.nPage = GetPrivateProfileInt(_T("Main"), _T("Page"), 6, strPath); 
GetPrivateProfileString("Main", "FileName", "TEXT", FileConfig.szFileName, 30, strPath);
//运行到此处会报错
GetPrivateProfileString(_T("Main"), _T("FileProperty"), szResult, FileConfig.strFileProperty, 255, strPath );

分析

经过调试可以发现,结构体里边所有的CString类型的变量开辟的空间都是NULL(错误的指针)。
实际上,这里是误把CString当做了与int、char相同的数据类型。其实CString是一个字符串类,这个类里是用指针用来存储内容,但是这个类里面除了指针以外,还是会有其他的成员。
另外,struct结构体申请内存都是根据结构体中最大字节数的数据类型申请的内存空间,是定长的。但是CString是不定长的。
而且一旦使用了CString,关于结构体操作的sizeof或者memset的使用都会出现异常。
综上所述:在我看来,在内存空间“定长”的结构体中,加入CString“不定长”的类,是会导致CString内部用来储存字符串的指针错误(无法开辟出合适的内存空间),在使用GetPrivateProfileString这类的函数时,就会出现错误。

结论

结构体中不建议使用CString,可以改为数组的方式,并给与固定的长度范围。

//定义的结构体
typedef struct READ_INICONFIG
{
	int			nPage;
	char		szFileName[20];
	char		szFileProperty[20];
}READINICONFIG;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值