Función que retorna una cadena

30/06/2004 - 19:57 por Amelia | Informe spam
Hola a todos

He probado este programa que sólo pretende crear una
función que retorne una cadena.

///////////////////////////////////////////////////////
#include "stdio.h"

char* ejemplo();

void main()
{
char *texto = ejemplo();
puts(texto);
}


char* ejemplo()
{
char texto[]="Perico";
return texto;
}

//////////////////////////////////////////////////////

Así no me funciona, pero si retorno una constante
return "perico" si funciona.

¿No puedo retornar una cadena que he almacenado
primeramente en un array?.

Os agradezco la ayuda.

Un saludo
Amelia

Preguntas similare

Leer las respuestas

#1 pablo_crosio
01/07/2004 - 06:14 | Informe spam
hola!

el problema es que lo que estas retornando en realidad no
es una cadena sino un puntero al
comienzo de la misma, y como la cadena (el arreglo) es
local al procedimiento, esta se
almacena en la pila de llamadas; al retornar de la funcion
por ende, el puntero ya no sera
valido.
cuando utilizas una constante la cosa cambia, el
compilador no utiliza la pila sino que se
retorna la direccion fija de memoria de la constante como
puntero y por eso funciona.

lo que deberias hacer es reservar primero memoria para
albergar los datos de la cadena y
luego llamar a la funcion pasandole la cadena por
referencia (el puntero al primer
elemento), luego en la funcion copias la cadena deseada a
la que pasas como parametro:




///////////////////////////////////////////////////////
#include "stdio.h"
#include "string.h"

void ejemplo(char* s);

void main()
{
char texto[100]; // se reserva memoria para
la cadena
ejemplo(texto);
puts(texto);
}


void ejemplo(char* s)
{
char texto[] = "Perico";
strcpy(s, texto);
return;
}

//////////////////////////////////////////////////////



hay otras formas de lograr lo que queres, como por ejemplo
alocar memoria dinamica antes de
llamar a la funcion; o mejor aun trabajar con clases (como
CString) que solucionan bastante
el tema de las cadenas.


salu2!

pablo




Hola a todos

He probado este programa que sólo pretende crear una
función que retorne una cadena.

///////////////////////////////////////////////////////
#include "stdio.h"

char* ejemplo();

void main()
{
char *texto = ejemplo();
puts(texto);
}


char* ejemplo()
{
char texto[]="Perico";
return texto;
}

//////////////////////////////////////////////////////

Así no me funciona, pero si retorno una constante
return "perico" si funciona.

¿No puedo retornar una cadena que he almacenado
primeramente en un array?.

Os agradezco la ayuda.

Un saludo
Amelia
.

Respuesta Responder a este mensaje
#2 Amelia
03/07/2004 - 09:09 | Informe spam
Muchas gracias, ya lo entiendo

Amelia


hola!

el problema es que lo que estas retornando en realidad


no
es una cadena sino un puntero al
comienzo de la misma, y como la cadena (el arreglo) es
local al procedimiento, esta se
almacena en la pila de llamadas; al retornar de la


funcion
por ende, el puntero ya no sera
valido.
cuando utilizas una constante la cosa cambia, el
compilador no utiliza la pila sino que se
retorna la direccion fija de memoria de la constante


como
puntero y por eso funciona.

lo que deberias hacer es reservar primero memoria para
albergar los datos de la cadena y
luego llamar a la funcion pasandole la cadena por
referencia (el puntero al primer
elemento), luego en la funcion copias la cadena deseada


a
la que pasas como parametro:




///////////////////////////////////////////////////////
#include "stdio.h"
#include "string.h"

void ejemplo(char* s);

void main()
{
char texto[100]; // se reserva memoria


para
la cadena
ejemplo(texto);
puts(texto);
}


void ejemplo(char* s)
{
char texto[] = "Perico";
strcpy(s, texto);
return;
}

//////////////////////////////////////////////////////



hay otras formas de lograr lo que queres, como por


ejemplo
alocar memoria dinamica antes de
llamar a la funcion; o mejor aun trabajar con clases


(como
CString) que solucionan bastante
el tema de las cadenas.


salu2!

pablo




Hola a todos

He probado este programa que sólo pretende crear una
función que retorne una cadena.

///////////////////////////////////////////////////////
#include "stdio.h"

char* ejemplo();

void main()
{
char *texto = ejemplo();
puts(texto);
}


char* ejemplo()
{
char texto[]="Perico";
return texto;
}

//////////////////////////////////////////////////////

Así no me funciona, pero si retorno una constante
return "perico" si funciona.

¿No puedo retornar una cadena que he almacenado
primeramente en un array?.

Os agradezco la ayuda.

Un saludo
Amelia
.



.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida