求助:一道有关C++程序

来源:百度知道 编辑:UC知道 时间:2024/07/01 01:24:35
#include <iostream>
#include <cstring>
using namespace std;

class Cow
{
private:
char name[20];
char *hobby;
double weight;
public:
Cow();
Cow(const char *nm, const char *ho, double wt);
Cow(const Cow &);
~Cow();
Cow & operator= (const Cow & c);
void ShowCow() const;
};

Cow::Cow()
{
strcpy(name, "no name");
hobby = new char[3];
strcpy(hobby, "no");
weight = 0;
}

Cow::Cow(const char *nm, const char *ho, double wt)
{
int len = strlen(ho);
hobby = new char[len + 1];
strncpy (name, nm, 19);
name[20] = '\0';
strcpy (hobby, ho);
weight = wt;
}

Cow::~Cow()
{
delete [] hobby;
}

Cow::Cow(const Cow & c)
{
int len = strlen(c.hobby);
hobby = new char[len + 1];
strncpy (name, c.name, 19);
name[20

所有的name[20] = '\0';都应该改为name[19] = '\0';
因为定义20个长度的数组,最后一个应该是19.
如果用[20]的下标,就破坏到其它数据了,你的程序破坏了
自己程序的数据,导致了内存错误.

上面的仁兄回答没错,这是常识!
之所以出现这些问题,我建议一使用<string>吧!
出错率会经不少哦!

一楼说得对呀!