C ++,从字符串到char数组的转换

时间:2011-12-09 19:44:57

标签: c++ arrays

我想执行上面提到的操作,但是我想确保char数组与手头的字符串完全相同。

所以真正的问题是,如何制作一个大小将在运行时确定的数组?

6 个答案:

答案 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数组。