急问,为什么会覆盖掉以前的数据,谢谢了,在线—
#include <iostream.h>
#include <string.h>
class BookCard
{
public:
char *m_sBookName;
char *m_sLience;
char *m_sAuthorName;
bool m_bBorrow;
public:
void regist(char *bookName, char *lience,char *authorName);
void showMe();
};
void BookCard::regist(char *bookname,char *lience,char *authorname)
{
m_sBookName=bookname;
m_sLience=lience;
m_sAuthorName=authorname;
m_bBorrow=false;
}
void BookCard::showMe()
{
cout < < " 书名: " < <m_sBookName;
cout < < " 序列号: " < <m_sLience;
cout < < " 作者: " < <m_sAuthorName;
}
void main()
{
BookCard bkcList[1000];
int bkcCount=0, bwcCount=0, bwrCount=0;
char service[80];
char bookname[80],booklience[80],bookauthorname[80];
do
{
cout < < " br: " < <endl;
cin> > service;
if(strcmp(service, "br ")==0)
{
cout < < "请输入要登记信息: ";
cin> > bookname;
cin> > booklience;
cin> > bookauthorname;
bkcList[bkcCount].regist(bookname,booklience,bookauthorname);
cout < < "你所登记为: " < <endl;
bkcList[bkcCount].showMe();
bkcCount++;
}
}while(strcmp(service, "exit ")!=0);
}
[解决办法]
> bkcList[bkcCount].regist(bookname,booklience,bookauthorname);
这里,传递的3个参数定义请注意。非动态分配。
> void BookCard::regist(char *bookname,char *lience,char *authorname)
> {
> m_sBookName=bookname;
> m_sLience=lience;
> m_sAuthorName=authorname;
> m_bBorrow=false;
> }
这里只是简单把穿过来的字符串地址赋给成员变量。造成所有BookCard的实例的成员变量都指向
> char bookname[80],booklience[80],bookauthorname[80];
修改方法:
void BookCard::regist(char *bookname,char *lience,char *authorname)
m_sBookName=new char[80];
memcpy(m_sBookName, bookname, 80);
......