【发布时间】:2021-05-23 03:09:24
【问题描述】:
这是我的代码。我创建一个 char 数组并通过 operator= 为其分配一个字符串文字。之后,我通过删除释放它。但是,它会导致分段。但它适用于 strcpy。另外,char数组总是由strcpy分配的吗?
我从 STL std::string 的实现中遇到了这个问题,我想知道为什么 private char* _data 总是由 strcpy 分配,不能由 operator=? 分配,因为 char* A= "HELLO WORLD" 也可以。
int main()
{
char* a=new char[3];
a="12";
//strcpy(a,"aa");
delete[] a;
}
【问题讨论】:
-
a是一个指针,a="12";将其设置为指向字符串文字,而不是之前指向的任何内容。它不会将字符串复制到您分配的数组中,它只是将指针更改为指向文字。 -
如果你想创建自己的
std::string替代品,你需要一个合适的class,然后使用operator=覆盖。
标签: c++ delete-operator stdstring strcpy