Me gustaría convertir string
a una char
matriz, pero no char*
. Sé cómo convertir cadenas a char*
(mediante el uso malloc
o la forma en que la publiqué en mi código), pero eso no es lo que quiero. Simplemente quiero convertir string
a una char[size]
matriz. ¿Es posible?
#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;
}
c++
string
type-conversion
Brian Brown
fuente
fuente
Respuestas:
La forma más sencilla en la que puedo pensar en hacerlo es:
Por seguridad, es posible que prefiera:
o podría ser de esta manera:
fuente
strncpy
es que no terminará en nulo si alcanza el tamaño antes de encontrar un nulo en la cadena de origen. ¡Debes tener cuidado con eso también!Ok, me sorprende que nadie haya dado una buena respuesta, ahora es mi turno. Hay dos casos;
Una matriz de caracteres constante es lo suficientemente buena para usted, así que vaya con,
O necesita modificar la matriz de caracteres para que la constante no esté bien, luego siga con esto
Ambos son solo operaciones de asignación y la mayoría de las veces eso es justo lo que necesita, si realmente necesita una nueva copia, siga las respuestas de otros compañeros.
fuente
std::size(elem)
en C ++ está bien definido cuandoelem
es unchar array
pero no se puede compilar cuandoelem
es unchar*
oconst char*
, puede verlo aquíLa forma más fácil de hacerlo sería esta
fuente
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 .
fuente
Simplemente copie la cadena en la matriz con
strcpy
.fuente
Intente de esta manera debería funcionar.
fuente
Pruebe strcpy (), pero como dijo Fred, esto es C ++, no C
fuente
Podrías usar
strcpy()
, así:Tenga cuidado con el desbordamiento del búfer.
fuente
Si no conoce el tamaño de la cadena de antemano, puede asignar dinámicamente una matriz:
fuente
Bien sé que esto tal vez tonta
quey simple, pero creo que debería funcionar:fuente
n
no puede ser más grande queb
. Se estrellaría sin>b
. Es mejor utilizar lastrcpy
función ya proporcionada. Editar: en algunos casos, podría ser incluso mejor usarlo,strcpy_s
ya que agrega verificación de punteros NULL (si su plataforma lo admite)Si está usando C ++ 11 o superior, sugeriría usar
std::snprintf
overstd::strcpy
ostd::strncpy
debido a su seguridad (es decir, usted determina cuántos caracteres se pueden escribir en su búfer) y porque termina en nulo la cadena por usted (entonces no tienes que preocuparte por eso). Sería así:En C ++ 17, tiene esta alternativa:
fuente