c++ - strcpy 不复制分配的字符数组

标签 c++ arrays string character

为什么这不起作用:

SomeClass::SomeClass(char *lit) //Ctor
{
    str = new char[strlen(lit)+1]; // str is a pointer to char in SomeClass
    strcpy(str,"have");
    cout << str << " " << "In Ctor" << " +Size=" << strlen(str)<< endl;
}

上面的代码显示了一个长度为 0 的字符串。但是这段代码有效:

SomeClass::SomeClass(char *lit)
{
    char newstr[strlen(lit)+1];
    strcpy(newstr,"have");
    cout << newstr << " " << "In Ctor" << " +Size=" << strlen(newstr)<< endl;
}

Here 是完整的代码。

编辑:
添加了指向 Ideone 的链接,在我回答问题后 OP 删除了该链接。
没有源代码链接,这个问答就没用了。

最佳答案

strcpy 没有问题,你只是弄乱了你的指针。

问题在这里:

 str = new char[strlen(lit)+1];
 strcpy(str,lit);
 length=leng();    <------------- str points to \0 after this call
 cout << str << " " << "In Ctor" << " +Size=" << strlen(lit)<< endl;

str 是您的类成员,您移动指针 str 以指向函数 leng() 中的 \0 ,自然地,您不会在下一条语句中看到任何输出。

解决方案是将起始地址保存在函数内的单独指针中。

int String :: leng()
{
      int length=0;
      char *tempPtr= str;       <----------- Store the address in a temporary pointer
      while(*str)
      {
                 length++;
                 str++;
      }
      str = tempPtr;            <---------- Point the Pointer member to right address again
      return length;
}

关于c++ - strcpy 不复制分配的字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10013478/

相关文章:

c++ - 由于地址错误导致执行失败

通过在每个元素后添加逗号将 C++ vector 转换为 CSV

C++ - 检测到服务器的多个连接

javascript - 如何以不可变的方式更新数组

java - 如何显示数组中负数的个数?

r - 每两个字符多次分割字符串

c++ - 内存重新对齐后重新对齐指针

使用宏连接嵌套字符串

string - 如何删除不可打印的字符

javascript - Array.prototype.forEach 元素的重新赋值