将Char *分配给字符串变量后删除它

时间:2013-03-08 21:46:46

标签: c++ string

我已经执行了下面的代码并且它工作正常。因为它是关于指针,我只是想确定。虽然我确定将字符串赋值给字符串进行复制,即使我删除了char *,字符串var也会保留该值。

#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>

int main(){
    std::string testStr = "whats up ...";
    int strlen = testStr.length();
    char* newCharP = new char[strlen+1];
    memset(newCharP,'\0',strlen+1);
    memcpy(newCharP,testStr.c_str(),strlen);

    std::cout << "  :11111111   :   " << newCharP << "\n";
    std::string newStr = newCharP ;

    std::cout << "  2222222 : " << newStr << "\n";
    delete[] newCharP;
    newCharP = NULL;

    std::cout << "  3333333 : " << newStr << "\n";
}

我只是在公司项目中更改一些代码,而char *在C ++中的函数之间传递。 char *指针已复制到字符串,但char *在函数末尾被删除。我找不到任何具体原因。所以我只是删除char *,只要它被复制到一个字符串中。这会有什么问题吗??

2 个答案:

答案 0 :(得分:2)

  

从安全创建std :: string后删除char数组吗?

答案 1 :(得分:2)

将C样式字符串(char数组)指定给std::string时。重载的赋值将C样式的字符串复制到std::string

std::string newStr = newCharP;

完成此分配后,newCharP的所有字符都会复制到newStr。然后,您可以安全地delete newCharP