String::String(const char *str)
{
if(NULL==str)
{
m_data = new char[1];
if(m_data==NULL)
{
cout<<"no enough heap"<<endl;
break;
}
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1];
if(m_data==NULL)
{
cout<<"no enough heap"<<endl;
break;
}
strcpy(m_data,str);
}
}
//String 构造函数必须加上对str是否为空的判断。如果不加而且str为空,那么程序的执行过程为计算str的长度,为数据成员m_data申请1个字节的堆内存,略过strcpy(该函数检测到str为空,所以不会执行),结束构造过程。所以在这个过程中并没有为m_data添加结束标志。
{
if(NULL==str)
{
m_data = new char[1];
if(m_data==NULL)
{
cout<<"no enough heap"<<endl;
break;
}
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1];
if(m_data==NULL)
{
cout<<"no enough heap"<<endl;
break;
}
strcpy(m_data,str);
}
}
//String 构造函数必须加上对str是否为空的判断。如果不加而且str为空,那么程序的执行过程为计算str的长度,为数据成员m_data申请1个字节的堆内存,略过strcpy(该函数检测到str为空,所以不会执行),结束构造过程。所以在这个过程中并没有为m_data添加结束标志。