Programación General > Visual C++

 Utilizar extern con una matriz dinamica de texto

<< < (2/2)

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

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa