当我尝试转换
时char abc[65536];
std::string str; //= "abc";
std::copy(str.begin(), str.end(), abc); // abc = "abcÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ..."
当我将str
的值复制到abc
时,我又获得了ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ..
。
我该如何解决这个问题?
答案 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
。