将char x[]数组赋值给char* ptr

  • 本文关键字:char ptr 赋值 数组 c++
  • 更新时间 :
  • 英文 :


我收到一个字符地址,我想让字符指针保存字符数组中的值

void assign(char set[]) {
m_ptr = new char[strlen(set) + 1];
strcpy(m_ptr, set);
// OR
m_ptr = set;

两种方式都可以吗?我也想避免内存泄漏,但我确实有一个析构函数,所以我认为我很好。

~Title() {
delete[] m_ptr;
}

初版

void assign(char set[]) {
m_ptr = new char[strlen(set) + 1];
strcpy(m_ptr, set);

这段代码创建了一个新的字符数组,并将旧数组中的字符复制到新数组中。所以你最终得到两个字符数组和两个指针,每个指向一个字符数组。然而,两个数组的内容是相同的。

第二版

void assign(char set[]) {
m_ptr = set;

这次没有创建新的字符数组,而是复制指针,所以只有一个字符数组,两个指针都指向它。

这是非常不同的结果,这真的取决于你决定哪种最适合你。然而,通常首选第一种方法。第二种方法的问题是,你最终会得到两个指向相同数据的点。在这种情况下,对数组的任何更改都将被两个指针看到,这可能会造成混淆。此外,如果数组需要删除,则不清楚是谁的责任,因为两个指针都可以用来删除数组。

所以我会使用第一个版本,除非你觉得你有充分的理由不使用。

最新更新