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;
}