请帮忙看下什么原因?

kingwrcy 2007-08-16 07:30:48
#include <iostream.h>
#include <string.h>

class account
{
private:
char* name;
char* ID;
char* address;
char zhanghao[20];
public:
account* next;
account* creat();
account* serach(char* e);
};

account a;

account* head;

account* account::creat()
{
int s=1;
account *p,*p1;
p=new account;
cout<<"输入你的帐号:"<<endl;
cin>>p->zhanghao;
cout<<"输入你的姓名:"<<endl;
cin>>p->name;
cout<<"输入你的身份证:"<<endl;
cin>>p->ID;
cout<<"输入你的地址:"<<endl;
cin>>p->address;
head=NULL;
p1=p;
while(s)
{
if(head==NULL)
{
head=p;
}
else
{
p1->next=p;

}
p=new account;
cout<<"1.继续输入"<<endl;
cout<<"2.返回"<<endl;
cout<<"请选择:"<<endl;
cin>>s;
if(s==1)
{
cout<<"输入你的帐号:"<<endl;
cin>>p->zhanghao;
cout<<"输入你的姓名:"<<endl;
cin>>p->name;
cout<<"输入你的身份证:"<<endl;
cin>>p->ID;
cout<<"输入你的地址:"<<endl;
cin>>p->address;
}
else
{
s=0;
}
}
delete p;
return head;
}




main()
{
int s=1,sec;
while(s)
{
cout<<"1.新建帐户."<<endl;
cout<<"2.查询帐户."<<endl;
cout<<"3.返回上级菜单."<<endl;
cout<<"请输入你的选择:"<<endl;
cin>>sec;
if(sec==1)
{
head=a.creat();
}
}


}



程序运行到cout<<"输入你的帐号:"<<endl;
cin>>p->zhanghao;
处就出错,我把account类中的char* zhanghao改成char zhanghao[20]运行就可以,请问这个是为什么?还有->和.2个符号有什么不同?各在什么情况下用?
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingwrcy 2007-08-16
  • 打赏
  • 举报
回复
大哥大姐们,小第才学C++,还没学到构造、析构函数挖,还有,上面的程序第一个功能输入数据OK,但是查询的时候出了问题,编译通过,运行时,能查出要查的结果,但是查完后,什么都没按,自己出错.那位帮忙看下啊,谢谢啊
yydrewdrew 2007-08-16
  • 打赏
  • 举报
回复
class account
{
public:
account()
{
name = new char[100];
ID = new char [100];
address = new char[100];
}
virtual ~account()
{
delete []name;
name =NULL;
delete []ID;
ID = NULL;
delete []address;
address =NULL;
}
private:
char* name;
char* ID;
char* address;
char zhanghao[20];


public:
account* next;
account* creat();
account* serach(char* e);
};
yydrewdrew 2007-08-16
  • 打赏
  • 举报
回复
给他们分配空间不能在类里面分配,哪应该在哪分配?
======
在构造函数里
csdn5211 2007-08-16
  • 打赏
  • 举报
回复
1、可以啊,可以在构造函数里面,用new运算符,在析构函数里delete掉。
2、凡是赋值,总得放在内存的某个地方吧,要不然计算机怎么知道把你输入的东西放到哪里。
3、用数组简单实用,但是要检查一下输入的长度不能越界,否则,嘿嘿,传说中的缓冲区溢出……
kingwrcy 2007-08-16
  • 打赏
  • 举报
回复
给他们分配空间不能在类里面分配,哪应该在哪分配?
yydrewdrew 2007-08-16
  • 打赏
  • 举报
回复
char* name;
char* ID;
char* address;
你并未对这几个指针的指向对象分配空间就对他们赋值了
gfxiang 2007-08-16
  • 打赏
  • 举报
回复
如果用char* zhanghao,你得为它分配内存

指针用->
类(结构)对象用.

->可以重载,.不可以重载
yydrewdrew 2007-08-16
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <string.h>

class account
{
private:
char name[100];
char ID[100];
char address[100];
char zhanghao[20];
public:
account* next;
account* creat();
account* serach(char* e);
};

account a;

account* head;

account* account::creat()
{
int s=1;
account *p,*p1;
p=new account;
cout<<"ÊäÈëÄãµÄÕʺÅ:"<<endl;
cin>>p->zhanghao;
cout<<"ÊäÈëÄãµÄÐÕÃû:"<<endl;
cin>>p->name;
cout<<"ÊäÈëÄãµÄÉí·ÝÖ¤:"<<endl;
cin>>p->ID;
cout<<"ÊäÈëÄãµÄµØÖ·:"<<endl;
cin>>p->address;
head=NULL;
p1=p;
while(s)
{
if(head==NULL)
{
head=p;
}
else
{
p1->next=p;

}
p=new account;
cout<<"1.¼ÌÐøÊäÈë"<<endl;
cout<<"2.·µ»Ø"<<endl;
cout<<"ÇëÑ¡Ôñ:"<<endl;
cin>>s;
if(s==1)
{
cout<<"ÊäÈëÄãµÄÕʺÅ:"<<endl;
cin>>p->zhanghao;
cout<<"ÊäÈëÄãµÄÐÕÃû:"<<endl;
cin>>p->name;
cout<<"ÊäÈëÄãµÄÉí·ÝÖ¤:"<<endl;
cin>>p->ID;
cout<<"ÊäÈëÄãµÄµØÖ·:"<<endl;
cin>>p->address;
}
else
{
s=0;
}
}
delete p;
return head;
}




main()
{
int s=1,sec;
while(s)
{
cout<<"1.н¨ÕÊ»§."<<endl;
cout<<"2.²éѯÕÊ»§."<<endl;
cout<<"3.·µ»ØÉϼ¶²Ëµ¥."<<endl;
cout<<"ÇëÊäÈëÄãµÄÑ¡Ôñ:"<<endl;
cin>>sec;
if(sec==1)
{
head=a.creat();
}
}
}

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧