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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  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 18,139 veces)
juancaa

Desconectado Desconectado

Mensajes: 140


[ Img^(Img) = Real ]


Ver Perfil
Funcion que retorne char array?
« en: 19 Julio 2012, 01:43 am »

Buenas, me gustaria saber si es posible devolver un array de caracteres y como. La verdad es que he probado bastantes cosas y rebuscado en google pero no he hallado la forma de hacerlo, tal vez con punteros...

Ejemplo en codigo :
Código
  1. int len = 20;
  2. char str[len];
  3. str = read_array(len);

He probado con varias cosas y nada, no hay manera, alguien me puede ayudar con esto porfa?


En línea

Que tengas un buen dia!
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Funcion que retorne char array?
« Respuesta #1 en: 19 Julio 2012, 01:48 am »

¡Hola!

Para crear una función que devuelva un array de caracteres debes hacer esto:

Código
  1. char* devolverArray()
  2. {
  3. //Aquí el código de la función
  4. return array_de_caracteres;
  5. }
  6.  
  7. int main()
  8. {
  9. //Código de main()
  10. cad = devolverArray();
  11. //resto de código de main()

Es decir, debes indicar que vas a devolver un char*, y retornar una variable de dicho tipo.

Saludos!


En línea

juancaa

Desconectado Desconectado

Mensajes: 140


[ Img^(Img) = Real ]


Ver Perfil
Re: Funcion que retorne char array?
« Respuesta #2 en: 19 Julio 2012, 02:36 am »

No hay manera, haber si puedes ayudarme, este es mi codigo basado en tu ejemplo:

Código
  1. #include <stdio.h>
  2.  
  3. char* func () {
  4. char txt2[20];
  5. printf("\nIntroduce word = ");
  6. scanf("%s", &txt2);
  7. return txt2;
  8. }
  9.  
  10. int main () {
  11. int len = 20;
  12. char str[20];
  13. str = func();
  14. printf("\nResult = %s.", str);
  15. return 0;
  16. }

Error :

Código:
	test.cpp: In function 'char* func()':
test.cpp:4:7: warning: address of local variable 'txt2' returned [enabled by default]
test.cpp: In function 'int main()':
test.cpp:13:13: error: incompatible types in assignment of 'char*' to 'char [20]'

En que me equivoco??
En línea

Que tengas un buen dia!
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Funcion que retorne char array?
« Respuesta #3 en: 19 Julio 2012, 02:41 am »

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char* func(void) {
  5. char *txt2 = malloc(20);
  6. printf("\nIntroduce word = ");
  7. scanf("%s", txt2);
  8. return txt2;
  9. }
  10.  
  11. int main(void) {
  12. int len = 20;
  13. char *str = func();
  14. printf("\nResult = %s.", str);
  15. free(str);
  16. return EXIT_SUCCESS;
  17. }
  18.  
  19.  
En línea

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


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Funcion que retorne char array?
« Respuesta #4 en: 19 Julio 2012, 02:42 am »

Vamos a ver , estás devolviendo un puntero , a una cadena de carácteres , si todavía no sabes que son los punteros pues como indica su nombre son apuntadores¿a qué? a direcciones de memoria, entonces char tx2[20] es un puntero que puede variar 20 posiciones, como se le ha indicado , pero claro tu estás asignando un puntero que se retorna de una función , a un array de carácteres.Y eso no es así , te dejo el código corregido:
Código
  1. #include <stdio.h>
  2.  
  3. char* func () {
  4. char txt2[20];
  5. printf("\nIntroduce word = ");
  6. scanf("%s", &txt2);
  7. return txt2;
  8. }
  9.  
  10. int main () {
  11. int len = 20;
  12. char *str; //Puntero al inicio de la variable txt2 , o sea a txt2 [0]
  13. str = func();
  14. printf("\nResult = %s.", str);
  15. return 0;
  16. }ara que te quede bien sería:
« Última modificación: 19 Julio 2012, 02:51 am por avesudra » En línea

Regístrate en
rir3760


Desconectado Desconectado

Mensajes: 1.639


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

No hay manera, haber si puedes ayudarme,

...

Error :
Código:
	test.cpp: In function 'char* func()':
test.cpp:4:7: warning: address of local variable 'txt2' returned [enabled by default]
test.cpp: In function 'int main()':
test.cpp:13:13: error: incompatible types in assignment of 'char*' to 'char [20]'

En que me equivoco??
Lo primero que debes aclarar es el lenguaje de programación que estas utilizando ya que el código fuente es C pero la extensión "cpp" sugiere que es C++. ¿Cual de ellos?

Si se trata de C debes seguir la solución de Leo Gutiérrez y si se trata de C++ puedes utilizar la clase string.

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
juancaa

Desconectado Desconectado

Mensajes: 140


[ Img^(Img) = Real ]


Ver Perfil
Re: Funcion que retorne char array?
« Respuesta #6 en: 19 Julio 2012, 03:17 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!!
« Última modificación: 19 Julio 2012, 03:32 am por fMtQr » En línea

Que tengas un buen dia!
juancaa

Desconectado Desconectado

Mensajes: 140


[ Img^(Img) = Real ]


Ver Perfil
Re: Funcion que retorne char array?
« Respuesta #7 en: 19 Julio 2012, 03:30 am »

rir3760 tienes toda la razon en eso, la verdad es que vengo de C y no se notar muy bien la diferencia entre C y C++... Esta pregunta la verdad me ha matado! Normalmente la unica diferencia que veo entre los codigos que utilizan C y los que utilizan C++ es que utilizan otro formato de entrada/salida (el namespace std) pero como todavia no estoy habituado pues no lo uso y al ver que el compilador tragaba pues yo seguia (no me maten por esto  :-X :-X).
Sea como sea, si estubiese usando C++ creo que deberia seguir pasando el array como puntero asi que la diferencia deberia ser minima por no decir nula, o me equivoco nuevamente ?
En línea

Que tengas un buen dia!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Funcion que retorne char array?
« Respuesta #8 en: 19 Julio 2012, 03:44 am »

Si estas aprendiendo C++ deberías utilizar las facilidades que este provee como es la clase string. Si no tienes una referencia de calidad puedes utilizar la del sitio (en ingles) C plus plus.

Un ejemplo sencillo (para el caso demasiado largo) es:
Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4.  
  5. #include <string>
  6. using std::string;
  7.  
  8. string fn(char texto[]);
  9.  
  10. int main()
  11. {
  12. string s;
  13.  
  14. s = fn("Esta es una cadena de prueba");
  15. cout << s << endl;
  16.  
  17. return 0;
  18. }
  19.  
  20. string fn(char texto[])
  21. {
  22. string s(texto);
  23.  
  24. return s;
  25. }

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
KaL3o

Desconectado Desconectado

Mensajes: 60



Ver Perfil
Re: Funcion que retorne char array?
« Respuesta #9 en: 19 Julio 2012, 03:46 am »

Lo q esta ocurriendo es que cuando mandas parametros por referencia tratandose de arrays, lo que haces es trabajar directamente con el array.

El problema aqui es q el vector esta declarado dentro de un ambito (en este caso una funcion), al terminar el ambito lo que tiene adentro se destruye o se llena de basura.

Por eso cuando devuelves la cadena por referencia (una direccion de memoria) a tu funcion main te aparece algo totalmente diferente.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
En línea

Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.
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 4,178 Ú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,405 Último mensaje 25 Julio 2012, 18:00 pm
por yokino
substring en array char « 1 2 »
Programación C/C++
soyloqbuskas 13 7,685 Ú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,837 Último mensaje 17 Agosto 2014, 23:03 pm
por cascaradebanana
Funcion que retorne structuras
Programación C/C++
perico02 3 2,383 Último mensaje 23 Octubre 2015, 06:36 am
por soyloqbuskas
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines