#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对对象进行初始化。
文章讲述了在C++编程中,由于结构体包含string对象,直接使用malloc或memset可能会导致问题,因为它们不会正确初始化对象。建议使用new来替代malloc,以确保对象的正确创建和初始化。当必须使用string时,应使用new关键字并避免memset。
279

被折叠的 条评论
为什么被折叠?



