Programación General > Visual C++
Utilizar extern con una matriz dinamica de texto
m0skit0:
Como veo que usas C++, te aconsejo que uses la clase string (#include <strings>) en vez de char *. Mucho más fácil de usar y es estándar.
Esto está mal:
--- Código: C ---char *cadena; porque tú lo que quieres es un puntero a un array de punteros, esto es:
--- Código: C ---char *cadena[];//O también:char **cadena; Salud
Eternal Idol:
Siendo char **cadena;
--- Código: C++ ---cadena = new char*[VariableIndice];for (int i = 0; i < VariableIndice; i++){ cadena[i] = new char[10];}
Primero reservas memoria para los punteros (cada uno es un char **) y despues para cada cadena que corresponde a cada elemento (char *) de la variable cadena.
kaito:
--- Cita de: "m0skit0" ---Esto está mal:
--- Código: C ---char *cadena; porque tú lo que quieres es un puntero a un array de punteros, esto es:
--- Código: C ---char *cadena[];//O también:char **cadena;
--- Fin de la cita ---
Al utilizar char *cadena[]; ha producido el error C2440: '=' : no se puede realizar la conversión de 'char (*)[10]' a 'char *[]'
Después, modifique la declaración por char (*cadena)[10];
Utilizando esta forma en la declaración de la variable, he desarrollado dos opciones:
A) Declarar una variable global al incio del codigo/Asignar con una igualdad los valores de la matriz local.
--- Código: C++ ---#include <iostream>#include <string>using namespace std; char (*cadena)[10]; void funcion(){ int VariableIndice=2; char (*Cadena)[10]=new char [VariableIndice][10]; strcpy(Cadena[0],"Uno"); strcpy(Cadena[1],"Dos"); cadena=Cadena;} void main() { funcion(); cout << cadena[0] << endl; cout << cadena[1] << endl;}
b) Utilizar una variable global al inicio del código/Dentro de la funcion eliminar con delete y redimensionar:
--- Código: C++ ---#include <iostream>#include <string>using namespace std; char (*cadena)[10]=new char [1][10]; void funcion(){ int VariableIndice=2; delete [] cadena; char (*cadena)[10]=new char [VariableIndice][10]; strcpy(cadena[0],"Uno"); strcpy(cadena[1],"Dos");} void main() { funcion(); cout << cadena[0] << endl; cout << cadena[1] << endl;}
Las dos formas funcionan correctamente. Pero :brickwall: en la opción A asigno las direcciones a memoria de una variable local, que no es visible o desaparece al salir de la función. ¿Podría ocurrir que durante la ejecución de otros procesos del programa se modificasen los valores de esas direcciones a memoria?.
Navegación
[*] Página Anterior
Ir a la versión completa