请问,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释放,会自动调用析构函数的。
}
PS:
对于像成员变量含有string这种类型数据成员的数据结构的指针:
----string这种类型,内部含有指针成员,自己会动态分配内存;----
只有用new 分配内存才可以,不然不会自动初始化,string这种类型的对象或者成员对象的。
那么string这种类型,内部的这个指针,既不会是NULL,也不会指向任何,
可以正常使用的内存,即这个内部的指针,就是个野指针了。
可想而知,后面的赋值操作 ,如 a->name = "LinZhixuan",就会出错了!
一个数据结构,包含string这样类型的,成员变量,只能用new 分配内存,不然会出错;
或者可以,用很麻烦的方法,模拟new处理内存分配和对象的初始化;
不过C++已经,有很好的方法了,为何不用??