c++ arrays cstring

c++ - Inicializando un Char*



arrays cstring (8)

Al igual que cualquier otra matriz:

char *a, *b, *c; char* cs[] = {a, b, c}; // initialized cs[0] = b; // assignment

La pregunta está en el título, ¿cómo inicializo un char * [] y le doy valores en C ++, gracias?


Aunque probablemente estés al tanto, char * [] es un conjunto de punteros a caracteres, y supongo que quieres almacenar una serie de cadenas. Inicializar una matriz de dichos punteros es tan simple como:

char ** array = new char *[SIZE];

... o si está asignando memoria en la pila:

char * array[SIZE];

Entonces probablemente querrás llenar la matriz con un bucle como:

for(unsigned int i = 0; i < SIZE; i++){ // str is likely to be an array of characters array[i] = str; }

Como se indica en los comentarios para esta respuesta, si está asignando la matriz con una nueva (asignación dinámica), recuerde eliminar su matriz con:

delete[] array;


Como eso:

char p1 = ''A''; char p2 = ''B''; char * t[] = {&p1, &p2}; std::cout << "p1=" << *t[0] << ", p2=" << *t[1] << std::endl;

Pero de alguna manera creo que esa no es la respuesta a la pregunta real ...

Si desea una matriz de cadenas de caracteres C definida en el momento de la compilación, debe utilizar una matriz de const char * en su lugar:

const char * t2[] = {"string1", "string2"}; std::cout << "p1=" << t2[0] << ", p2=" << t2[1] << std::endl;

Sin la const, mi compilador diría: advertencia: conversión obsoleta de cadena constante a ''char *''


Dependiendo de lo que quieras inicializar, puedes hacer lo siguiente:

char mystr[] = {''h'',''i'',0}; char * myotherstring = "my other string"; char * mythirdstring = "goodbye"; char * myarr[] = {0}; char * myarr[] = {&mystr, myotherstring}; char * myarr[10]; char * myarr[10] = {0}; char * myarr[10] = {&mystr, myotherstring, mythirdstring, 0};

etcétera etcétera.


Me gusta esto:

char* my_c_string; char* x[] = { "hello", "world", 0, my_c_string };


Si realmente desea una serie de cadenas constantes de estilo C (por ejemplo, mensajes indexados):

const char* messages[] = { "Beginning", "Working", "Finishing", "Done" };

Sin embargo, si está intentando mantener un contenedor de cadenas de variables de tiempo de ejecución, el uso de C ++ facility std::vector<std::string> hará que el seguimiento de todas las operaciones de memoria sea mucho más fácil.

std::vector<std::string> strings; std::string my_string("Hello, world.") strings.push_back("String1"); strings.push_back(my_string);


Una cosa que he notado es que debes tener cuidado con ... C y C ++ se han desviado un poco en la sintaxis de inicialización. Como señala Mark B. arriba, puedes inicializar un conjunto de punteros de caracteres de este modo:

const char* messages[] = { "Beginning", "Working", "Finishing", "Done" };

Pero en C ++. como señala kriss, esto le envía una advertencia sobre una conversión obsoleta de cadena a char *. Esto se debe a que C ++ supone que querrá usar cadenas para las cadenas; -}.

Eso no siempre es cierto. Entonces, cuando realmente quieres inicializar una matriz de caracteres *, he descubierto que tengo que hacerlo así:

const char* messages[] = { (char*)("Beginning"), (char*)("Working"), (char*)("Finishing"), (char*)("Done") };

El compilador ahora es feliz ...


#include <iostream> int main(int argc, char *argv[]) { char **strings = new char *[2]; // create an array of two character pointers strings[0] = "hello"; // set the first pointer in the array to "hello" strings[1] = "world"; // set the second pointer in the array to "world" // loop through the array and print whatever it points to out with a space // after it for (int i = 0; i < 2; ++i) { std::cout << strings[i] << " "; } std::cout << std::endl; return 0; }