基本问题c ++,动态内存分配

Zia*_*man 0 c++ oop

假设我有一堂课

class person
{
char* name;
public:
void setname(const char*);
};
void person::setname(const char* p)
{
name=new char[strlen(p)];
strcpy(name,p);
name[strlen(p)]='\0';
}
Run Code Online (Sandbox Code Playgroud)

我的问题是关于行名= new char [strlen(p)]; 假设p指针指向字符串,即"zia",现在strlen(p)将返回3,这意味着我们有一个包含4个字符的数组,即char [3]现在我将字符串复制到名称中,在第4个位置,我把空字符,这有什么问题?????

小智 5

你说:

我们有一个包含4个字符的数组,即char [3]

令人惊讶的是,char [3]是三个字符的数组,而不是四个!