结构体 使用string

文章讲述了在C++编程中,由于结构体包含string对象,直接使用malloc或memset可能会导致问题,因为它们不会正确初始化对象。建议使用new来替代malloc,以确保对象的正确创建和初始化。当必须使用string时,应使用new关键字并避免memset。
#include <bits/stdc++.h>
using namespace std;
struct xuesheng {
//	string ming;    这里用string会报错,原因是string是一个对象,
                  //里面还有其他数组,如果用malloc或memset的话,会破坏
				  //其他数据。 
	char ming[9];
	int yu;
	int shu;
	int ying;
	int zong;
};
int main() {
	int n = 0;
	cin>>n;
	xuesheng *p;
	p = (xuesheng *)malloc(sizeof(xuesheng) * n);
	memset(p,0,sizeof(xuesheng) * n);
	for(int i = 0;i < n;i++) {
		cin>>p[i].ming>>p[i].yu>>p[i].shu>>p[i].ying;
		p[i].zong = p[i].yu + p[i].shu + p[i].ying;
	}
	int max = 0,maxs = 0;
	for(int i = 0;i < n;i++) {
		if(p[i].zong > maxs) {
			maxs = p[i].zong;
			max = i;
		}
	}
	cout<<endl<<<<p[max].ming<<endl<<" "<<p[max].yu<<" "<<p[max].shu<<" "<<p[max].ying<<endl;
    return 0;
}

总结:

结构体中尽量不要用string,原因是结构体是一个对象,如果使用malloc或memset会报错,如果非要用的话,只能用new。因为malloc只会申请内存,不会初始化。而new可以申请内存,也可以初始化。
在c里没有new,new是后来在c++出现的,所以c++既可以用new也可以用malloc。
如果非要用string的话,需要满足条件。
1.使用new关键字,不能使用malloc。
2.不能使用memset对对象进行初始化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值