如何正确地将std :: string的值复制到char []?

时间:2014-03-19 14:35:01

标签: c++

当我尝试转换

char abc[65536]; 
std::string str; //= "abc";
std::copy(str.begin(), str.end(), abc); // abc = "abcÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ..."

当我将str的值复制到abc时,我又获得了ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ..

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

string有一个接受char*的构造函数,所以:

std::string str(abc);

编辑:哦,你改变了问题。你的问题是空终止。

str有3个字符。 copy复制这3个字符。这意味着abc(尚未)以空值终止。所以你不知道字符串的结尾在哪里。

abc[str.length()] = 0;

将null终止。

我还建议动态分配这个内存,因为1.堆栈上的64kb很多,而且2.你通过对字符串大小做出假设来为自己设置一个难以发现的灾难和/或安全漏洞

如果您可以使用const char *,请考虑使用str.c_str()访问基础数组。

答案 1 :(得分:2)

无需使用std::copy。只需在c_str()上调用std::string方法。

char * cstr = new char [str.length()+1];
std::strcpy (cstr, str.c_str());

答案 2 :(得分:0)

您可以使用strcpy(abc,str.c_str()),这会将字符串从str复制到abc