我想执行上面提到的操作,但是我想确保char数组与手头的字符串完全相同。
所以真正的问题是,如何制作一个大小将在运行时确定的数组?
答案 0 :(得分:5)
在免费商店分配内存,并一次性复制字符串:
std::string s("abcdef");
...
char* chars=strdup(s.c_str());
当然,您需要手动释放内存。文件例如在man page上。正如@Loki所提到的:释放这段记忆是通过free(chars)
完成的,而不是通过delete
。此外,您还需要包含<cstring>
标题。
如果你想留在c ++世界,请使用vector
;它可以用两个迭代器创建来复制它的数据,并将在堆上分配,和将自行清理。这不是一种享受吗?
std::vector<char> vec( s.begin(), s.end() );
答案 1 :(得分:3)
您可以使用“new”运算符创建一个在运行时已知的大小数组:
char* res = new char[str.size()+1];
strncpy(res, str.c_str(), str.size()+1);
答案 2 :(得分:2)
std::string s = "hello";
char* c = new char[s.length() + 1]; // '+ 1' is for trailing NULL character.
strcpy(c, s.c_str());
答案 3 :(得分:1)
#include <string>
int main(int argc, char *argv[])
{
std::string random_data("This is a string");
char *array=new char[random_data.size()+1];
// do stuff
delete[] array;
return 0;
}
答案 4 :(得分:1)
尝试:
char* res = new char[str.size()+1](); // Note the () makes sure it is '0' filled.
std::copy(str.begin(), str.end(), res); // Don't need to copy the '\0' as underlying
// array already has '\0' at the end position.
...
delete [] res; // Must not forget to delete.
或者:(最好)
std::vector<char> res(str.begin(), str.end());
或者:如果你想做的就是打电话给C-unction:
str.c_str()
答案 5 :(得分:-1)
使用strlen()查找字符串的长度,然后使用malloc()查找该大小的char数组。