elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Funcion que retorne char array?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Funcion que retorne char array?  (Leído 17,460 veces)
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Funcion que retorne char array?
« Respuesta #10 en: 19 Julio 2012, 07:13 am »

Gracias por vuestras respuestas!
Respecto al codigo de Leo Gutiérrez. me sigue dando errores de compilacion :

Código:
	test.cpp: In function 'char* func()':
test.cpp:5:24: error: invalid conversion from 'void*' to 'char*' [-fpermissive]

Utilizando el metodo de avesudra logro compilar el codigo pero la salida no acaba de cuadrar :

Código:
	Introduce word = casa
Result = casa╠■(.

Aunque ahora ya puedo devolver el array la salida devuelve caracteres que no se de donde salen... Alguna idea de como solucionar esto??
Muchas gracias por vuestra ayuda!!

A mi código agregale un (char *) antes del malloc, algo así:

(char *)malloc(....)

El compilador no debería de pedirlo, es extraño.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Funcion que retorne char array?
« Respuesta #11 en: 19 Julio 2012, 09:43 am »

Citar
A mi código agregale un (char *) antes del malloc, algo así:

(char *)malloc(....)

El compilador no debería de pedirlo, es extraño.

A mí siempre me ha pedido el (char*) antes de usar malloc(). Creo (o supongo, no lo sé seguro) que es para que el compilador sepa si lo que quieres que tenga 20 elementos es el vector, o en el caso de las matrices; si hay 20 columnas o 20 filas.

Por otra parte, yo siempre he usado:

Código
  1. variable = (char *) malloc (20 * sizeof(char));

Creo que es necesario poner también el sizeof(char) para que sepa que tiene que reservar el espacio de 20 char, al menos así lo vi yo por los libros a partir de los que aprendí C.

Saludos!


« Última modificación: 19 Julio 2012, 09:45 am por DickGumshoe » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Funcion que retorne char array?
« Respuesta #12 en: 19 Julio 2012, 14:58 pm »

¡Buenas!

Ya te han dado varias soluciones, voy a intentar darte una explicacion de porque no funcionaba tu codigo.

No se si sabes lo que es la pila de un programa. Es una parte de la memoria en la que se van acumulando datos de llamadas a funciones, alli se ponen, entre otras cosas, los parametros que pasas a las funciones y el valor de retorno. Una vez que se sale de la funcion, se "recupera" la memoria que se ha utilizado, incluida la que utilizan las variables locales, por lo tanto, como ya han dicho en alguno de las respuestas, los valores que contienen se pueden perder. Esto quiere decir que si devuelves un puntero a una variable que se encuentre dentro de una funcion, lo que estas devolviendo, en principio, es un puntero a alguna parte de la pila, que esta modificandose de forma continua. De ahi la "basura" que encuentras.

Tienes varias formas de solucionar el problema (que yo sepa 4 evidentes... ¿Alguien da mas?), dos muy parecidas, una de ellas ya te la han dado.

Puedes asignar memoria a un puntero local, esto no se perdera, ya que estaras devolviendo un valor a una posicion de memoria no de la pila, sino del heap.

Otra opcion es pasar a la funcion una cadena desde la funcion llamadora.

Si en principio no sabes cuanto va a ocupar el vector (porque por ejemplo ese dato lo obtienes dentro de la funcion) tambien puedes pasar en la lista de parametros un puntero a un puntero y actuar como en el primer caso, asignando la memoria de forma dinamica.

Y para terminar, puedes declarar la variable dentro de la propia funcion como static, de esta forma, cuando salgas de la funcion te aseguraras de que mantiene la informacion, pero esta cambiara de una llamada a otra, por lo que despues de cada llamada tendras que guardar o procesar inmediatamente el dato para que en posteriores llamadas no pierdas informacion que te pueda interesar.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Funcion que retorne char array?
« Respuesta #13 en: 19 Julio 2012, 16:23 pm »

A mí siempre me ha pedido el (char*) antes de usar malloc().
Si compilas como C no debe pedirte la conversión, ella es automática.
Si compilas como C++ la conversión es obligatoria.


Por otra parte, yo siempre he usado:

Código
  1. variable = (char *) malloc (20 * sizeof(char));

Creo que es necesario poner también el sizeof(char) para que sepa que tiene que reservar el espacio de 20 char, al menos así lo vi yo por los libros a partir de los que aprendí C.
No es necesaria esa multiplicación ya que "sizeof(char)" siempre es igual a uno.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error al definir array char en DEV-CPP
Programación C/C++
DA KILLER 6 3,882 Último mensaje 27 Febrero 2012, 13:39 pm
por satu
C++ funcion que retorne una cadena de caracteres
Programación C/C++
yokino 2 5,157 Último mensaje 25 Julio 2012, 18:00 pm
por yokino
substring en array char « 1 2 »
Programación C/C++
soyloqbuskas 13 7,064 Último mensaje 22 Septiembre 2012, 00:33 am
por rir3760
Ayuda..Problema Con Funcion Que Retorne Pares Positivos En Dev C++...
Programación C/C++
grego027 9 4,515 Último mensaje 17 Agosto 2014, 23:03 pm
por cascaradebanana
Funcion que retorne structuras
Programación C/C++
perico02 3 2,133 Último mensaje 23 Octubre 2015, 06:36 am
por soyloqbuskas
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines