C/Visual C - Crear cadena en función

 
Vista:

Crear cadena en función

Publicado por vitruvio (1 intervención) el 31/12/2002 01:41:30
Que tal!!
Tengo la siguiente duda. Supongamos el siguiente código:

int main() {
char *cadena;
...
llamada_a_funcion(cadena, otrosdatos)
...
}

void llamada_a_funcion(char *cadena, otrosdatos) {
...
cadena = new char[ALGO]
...
}

Mi idea es modificar cadena dentro de la función. El problema es que el tamaño que tiene la cadena se calcula en la función. Por las características del programa, la cadena DEBE ser creada (es decir con new) y rellenada dentro de la función. El probema es que ya en el main, la cadena es ilegible (supongo que es porque al crearla con new en la función ,se destruye al salir de esta). Mi pregunta es clara: ¿como puedo acceder a esa cadena desde el main una vez terminada la función?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Crear cadena en función

Publicado por Ragayaga (4 intervenciones) el 31/12/2002 04:03:23
Saludos vitruvio, el problema es que estás usando variables diferentes, es decir, la variable cadena declarada en el cuerpo (main), no tiene nada que ver con la variable cadena en la función.

En el siguiente ejemplo te muestro algo que tal vez te sirva:

#include <iostream.h>
#include <string.h>

void llenar_cadena(void);

char *cadena;

void main()
{
llenar_cadena();
cout << cadena;
}

void llenar_cadena(void)
{
cadena = new char[11];
strcpy(cadena,"Hello World");
}

En este ejemplo lo que hice fue crear una variable global y la accedí desde la función, sin embargo podrías usar otras formas de hacer esto, por ejemplo podrías usar (::), es decir, el operador de resolución de visibilidad (scope resolution operator).

Bueno en fin el problema es por la visibilidad de las variables, una vez entendido esto lo harás como quieras..

Adiós y suerte...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crear cadena en función

Publicado por Endos (58 intervenciones) el 31/12/2002 12:07:57
El problema es que el puntero que pasas a llamada_a_funcion() ya no apunta a la misma dirección después de la asignación de memoria.
La solución es simple, retornar el puntero desde la función:

int main() {
char *cadena;
...
cadena=llamada_a_funcion(cadena, otrosdatos)
...
}

char *llamada_a_funcion(char *cadena, otrosdatos) {
...
cadena = new char[ALGO]
...
return cadena;
}

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crear cadena en función

Publicado por El Mogur (202 intervenciones) el 01/01/2003 17:54:38
También puedes pasar el puntero a char por valor a la función, para convertirlo en un parámetro de 'entrada/salida'. De esta forma, los cambios en la variable 'cadena' que se hagan dentro de la función son accesibles desde fuera.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar