请问,input/output 为什么会出错 结构体指针不能这么用么》
GeShou* a;
a=(struct GeShou *)malloc(sizeof(struct GeShou));
if(a!=NULL)
cout<<"ok"<<endl<<sizeof(*a);
a->name="LinZhixuan";
a->age=22;
a->song="凤凰花开的路上";
cout << a->name << endl;
cout << a->age<< endl;
cout << a->song << endl; struct malloc ccodeblock
[解决办法]
string 类型是需要构造函数的,当然不行,是 char* 还差不多
[解决办法]
//1)用C的方法,字符串用固定长度字符数组。
struct GeShou{
char name[20];
int age;
char song[80];
};
void playSong()
{
GeShou* a=NULL;//这个不必学C了。
a=(struct GeShou *)malloc(sizeof(struct GeShou));//这个其实也,不必学C了,虽然这也不是错。
//a = (GeShou *)malloc(sizeof( GeShou ) ); //C++ 结构名,本身就是类型名了,不必加struct 。
if(!a) return ;
cout<<"ok"<<endl<<sizeof(*a);
strcpy(a->name,"LinZhixuan");//只能用strcpy这样了。
a->age=22;
strcpy(a->song,"凤凰花开的路上");//只能用strcpy这样了。
cout << a->name << endl;
cout << a->age<< endl;
cout << a->song << endl;
free(a); //分配的内存,用完要释放。
}
//2)用C++的方法,字符串用string。
struct GeShou{
string name;
int age;
string song;
};
void playSong()
{
GeShou* a=NULL;
a=new GeShou;//new 会自动调用构造函数,成语变量的构造函数,也会自动调用。
//malloc只会分配内存,因为C的malloc就是这个样子的。
if(!a) return ;
cout<<"ok"<<endl<<sizeof(*a);
a->name = "LinZhixuan";
a->age=22;
a->song = "凤凰花开的路上";
cout << a->name << endl;
cout << a->age<< endl;
cout << a->song << endl;
delete a; //new 分配的要用 delete释放,会自动调用析构函数的。
}