如何将string转换为C + +中的字符数组?

我想将string转换为char数组,但不是char* 。 我知道如何将string转换为char* (通过使用malloc或我的方式发布在我的代码中) – 但这不是我想要的。 我只是想将string转换为char[size]数组。 可能吗?

 #include <iostream> #include <string> #include <stdio.h> using namespace std; int main() { // char to string char tab[4]; tab[0] = 'c'; tab[1] = 'a'; tab[2] = 't'; tab[3] = '\0'; string tmp(tab); cout << tmp << "\n"; // string to char* - but thats not what I want char *c = const_cast<char*>(tmp.c_str()); cout << c << "\n"; //string to char char tab2[1024]; // ? return 0; } 

我能想到的最简单的方法是:

 string temp = "cat"; char tab2[1024]; strcpy(tab2, temp.c_str()); 

为了安全,你可能更喜欢:

 string temp = "cat"; char tab2[1024]; strncpy(tab2, temp.c_str(), sizeof(tab2)); tab2[sizeof(tab2) - 1] = 0; 

好吧,我感到震惊,现在轮到我没有人真的给出了一个好的答案。 有两种情况。

  1. 一个恒定的字符数组对你来说足够好,所以你一起去,

     const char *array = tmp.c_str(); 
  2. 或者你需要修改这个char数组,这样就不会有问题,那么就去做吧

     char *array = &tmp[0]; 

他们都只是分配操作 ,大部分时间就是你所需要的,如果你真的需要一个新的副本,然后按照其他人的答案。

最简单的方法就是这样做

 std::string myWord = "myWord"; char myArray[myWord.size()+1];//as 1 char space for null is also required strcpy(myArray, myWord.c_str()); 

只需将该string复制到strcpy数组中。

 str.copy(cstr, str.length()+1); // since C++11 cstr[str.copy(cstr, str.length())] = '\0'; // before C++11 cstr[str.copy(cstr, sizeof(cstr)-1)] = '\0'; // before C++11 (safe) 

在C ++中避免使用C是一个更好的做法,所以std :: string :: copy应该是strcpy的select。

尝试strcpy(),但如Fred所说,这是C ++,而不是C

尝试这种方式应该是工作。

 string line="hello world"; char * data = new char[line.size() + 1]; copy(line.begin(), line.end(), data); data[line.size()] = '\0'; 

你可以使用strcpy() ,就像这样:

 strcpy(tab2, tmp.c_str()); 

注意缓冲区溢出。

如果事先不知道string的大小,并且它可能会变化很大,那么可以使用unique_ptr的数组重载获得一个dynamic分配的固定大小的数组:

 auto tab2 = std::make_unique<char[]>(temp.size() + 1); std::strcpy(tab2.get(), temp.c_str()); 

请注意,您不需要strncpy ,因为数组首先被分配的空间足够大。

那么我知道这可能简单愚蠢,但我认为它应该工作:

 string n; cin>> n; char b[200]; for (int i = 0; i < sizeof(n); i++) { b[i] = n[i]; cout<< b[i]<< " "; }