我已经执行了下面的代码并且它工作正常。因为它是关于指针,我只是想确定。虽然我确定将字符串赋值给字符串进行复制,即使我删除了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 *,只要它被复制到一个字符串中。这会有什么问题吗??
答案 0 :(得分:2)
从安全创建std :: string后删除char数组吗?
答案 1 :(得分:2)
将C样式字符串(char
数组)指定给std::string
时。重载的赋值将C样式的字符串复制到std::string
。
std::string newStr = newCharP;
完成此分配后,newCharP
的所有字符都会复制到newStr
。然后,您可以安全地delete
newCharP
。