¿Cómo convertir una cadena a una matriz de caracteres en C ++?

Me gustaría convertir string a matriz de caracteres pero no a caracteres char* . Sé cómo convertir cadenas a char* (usando malloc o la forma en que lo publiqué en mi código), pero eso no es lo que quiero. Simplemente quiero convertir una string a una matriz de caracteres char[size] . ¿Es posible?

 #include  #include  #include  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(tmp.c_str()); cout << c << "\n"; //string to char char tab2[1024]; // ? return 0; } 

La forma más sencilla en que puedo pensar es:

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

Por seguridad, puede preferir:

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

o podría ser de esta manera:

 string temp = "cat"; char * tab2 = new char [temp.length()+1]; strcpy (tab2, temp.c_str()); 

Ok, estoy sorprendido de que nadie realmente haya dado una buena respuesta, ahora es mi turno. Hay dos casos;

  1. Una matriz de caracteres constante es lo suficientemente buena para ti, así que ve con,

     const char *array = tmp.c_str(); 
  2. O necesita modificar la matriz de caracteres para que la constante no esté bien, entonces simplemente siga con esto

     char *array = &tmp[0]; 

Ambas son solo operaciones de asignación y la mayoría de las veces eso es justo lo que necesitas, si realmente necesitas una copia nueva y luego sigues las respuestas de otros compañeros.

La forma más fácil de hacerlo sería este

 std::string myWord = "myWord"; char myArray[myWord.size()+1];//as 1 char space for null is also required strcpy(myArray, myWord.c_str()); 
 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) 

Es una mejor práctica evitar C en C ++, por lo que std :: string :: copy debería ser la opción en lugar de strcpy .

Solo copie la cadena en la matriz con strcpy .

Intenta de esta manera que sea un trabajo.

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

Pruebe strcpy (), pero como dijo Fred, esto es C ++, no C

Podría usar strcpy() , así:

 strcpy(tab2, tmp.c_str()); 

Tenga cuidado con el desbordamiento del búfer.

Si no conoce el tamaño de la cadena de antemano y puede variar ampliamente, puede obtener una matriz de tamaño fijo dinámicamente asignada con la sobrecarga de la matriz de unique_ptr :

 auto tab2 = std::make_unique(temp.size() + 1); std::strcpy(tab2.get(), temp.c_str()); 

Tenga en cuenta que no necesita strncpy aquí ya que la matriz se asigna para ser lo suficientemente grande en primer lugar.

Bueno, sé que esto puede ser bastante tonto y simple, pero creo que debería funcionar:

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