Autor
|
Tema: Funcion que retorne char array? (Leído 18,059 veces)
|
juancaa
Desconectado
Mensajes: 140
[ Img^(Img) = Real ]
|
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 : int len = 20; char str[len]; 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
|
¡Hola! Para crear una función que devuelva un array de caracteres debes hacer esto: char* devolverArray() { //Aquí el código de la función return array_de_caracteres; } int main() { //Código de main() cad = devolverArray(); //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
Mensajes: 140
[ Img^(Img) = Real ]
|
No hay manera, haber si puedes ayudarme, este es mi codigo basado en tu ejemplo: #include <stdio.h> char* func () { char txt2[20]; printf("\nIntroduce word = "); return txt2; } int main () { int len = 20; char str[20]; str = func(); printf("\nResult = %s.", str ); return 0; }
Error : 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
Mensajes: 3.069
/^$/
|
#include <stdio.h> #include <stdlib.h> char* func(void) { printf("\nIntroduce word = "); return txt2; } int main(void) { int len = 20; char *str = func(); printf("\nResult = %s.", str ); return EXIT_SUCCESS; }
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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: #include <stdio.h> char* func () { char txt2[20]; printf("\nIntroduce word = "); return txt2; } int main () { int len = 20; char *str; //Puntero al inicio de la variable txt2 , o sea a txt2 [0] str = func(); printf("\nResult = %s.", str ); return 0; }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
Mensajes: 1.639
|
No hay manera, haber si puedes ayudarme, ... Error : 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
Mensajes: 140
[ Img^(Img) = Real ]
|
Gracias por vuestras respuestas! Respecto al codigo de Leo Gutiérrez. me sigue dando errores de compilacion : 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 : 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
Mensajes: 140
[ Img^(Img) = Real ]
|
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 ). 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
Mensajes: 1.639
|
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: #include <iostream> using std::cout; using std::endl; #include <string> using std::string; string fn(char texto[]); int main() { string s; s = fn("Esta es una cadena de prueba"); cout << s << endl; return 0; } string fn(char texto[]) { string s(texto); return s; }
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
Mensajes: 60
|
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.
|
|
|
|
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,149
|
27 Febrero 2012, 13:39 pm
por satu
|
|
|
C++ funcion que retorne una cadena de caracteres
Programación C/C++
|
yokino
|
2
|
5,375
|
25 Julio 2012, 18:00 pm
por yokino
|
|
|
substring en array char
« 1 2 »
Programación C/C++
|
soyloqbuskas
|
13
|
7,599
|
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,795
|
17 Agosto 2014, 23:03 pm
por cascaradebanana
|
|
|
Funcion que retorne structuras
Programación C/C++
|
perico02
|
3
|
2,350
|
23 Octubre 2015, 06:36 am
por soyloqbuskas
|
|