Me gustaría convertir stringa una charmatriz, pero no char*. Sé cómo convertir cadenas a char*(mediante el uso malloco la forma en que la publiqué en mi código), pero eso no es lo que quiero. Simplemente quiero convertir stringa 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
strncpyes 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 cuandoelemes unchar arraypero no se puede compilar cuandoelemes 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
nno puede ser más grande queb. Se estrellaría sin>b. Es mejor utilizar lastrcpyfunción ya proporcionada. Editar: en algunos casos, podría ser incluso mejor usarlo,strcpy_sya que agrega verificación de punteros NULL (si su plataforma lo admite)Si está usando C ++ 11 o superior, sugeriría usar
std::snprintfoverstd::strcpyostd::strncpydebido 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