|
Regresar una cadena de una funcion
|
| Autor |
Mensaje |
Snoopydog
Usuario PL
Mensajes: 27
Grupo: Registrado
Registro en: Jun 2007
Estado:
Sin Conexión
Reputación: 0
|
Regresar una cadena de una funcion
Hola buenas tardes tengan todos aqui les vengo con un problemita mas, programando en C me tope con la necesidad de regresar una cadena de una funcion es decir el sig ejemplo:
char funcion(char var)
{char var1[20]="hola";
char var2[20];
strcat(var,var2);
strcat(var2,var);
return var2;
}
entonces mi problema es ke me marca warning al compilar me dice:
warning: return makes integer from pointer without a cast
warning: function returns address of local variable
otro problema es que al querer atrapar el valor que regresa la funcion con una variable, ejemplo
int main()
{
char variable[20];
variable=funcion();
return 0;
}
me marca el siguiente:
warning: incompatible type
Por tanto noe stoy seguro si estoy regresando la cadena correctamente, alguien ha tenido este problema?? como lo resolvieron??
Muchas gracias por su atencion
|
|
| 11-05-2007 09:45 PM |
|
 |
german
Moderador
    
Mensajes: 224
Grupo: Moderadores
Registro en: Apr 2006
Estado:
Sin Conexión
Reputación: 3
|
RE: Regresar una cadena de una funcion
esta bien la funcion, pero mal la funcion, te falto el * en la declaracion.
Con eso te deberia andar, te recuerdo que una cadena es un arreglo de chars asi que si declaras como char (sin el asterisco) estas diciendo que vas a usar UNA letra sola o numeros del 0-255 (pero esto ya es otra cosa).
|
|
| 11-06-2007 01:13 PM |
|
 |
Snoopydog
Usuario PL
Mensajes: 27
Grupo: Registrado
Registro en: Jun 2007
Estado:
Sin Conexión
Reputación: 0
|
RE: Regresar una cadena de una funcion
Hola german gracias por tu atencion, y vale ya lo he hecho con punteros y no me marca los warning, el problema es ke funcion me tiene ke regresar una cadena que concateno en funcion, y se la tengo ke asignar a una variable para imprimirla en una pequeña impresora epson, ahora si vuelvo un valor tipo puntero "char* funcion()", al momento de asignarlo a una variable en el main me dice que los tipos son incompatibles y si deseo imprimir directo, las funciones de la impresora me marcan que no se pueden imprimir punteros... es decir ocupo ke funcion me mande una cadena, ejemplo:
char funcion()
{char var[20]="hola";
return var;
}
int main()
{char variable[20];
variable=funcion();
printf("%s",variable);// y debe imprimirme "hola" y no una direccion de memoria 0xsfd34f....
}
en funcion yo hago una serie de concatenaciones a var y deseo me regrese esas concatenaicones para imprimirlas pero como tipo caracter no como puntero, espero me puedas ayudar saludos .
|
|
| 11-06-2007 01:44 PM |
|
 |
Snoopydog
Usuario PL
Mensajes: 27
Grupo: Registrado
Registro en: Jun 2007
Estado:
Sin Conexión
Reputación: 0
|
RE: Regresar una cadena de una funcion
|
|
| 11-06-2007 08:11 PM |
|
 |
german
Moderador
    
Mensajes: 224
Grupo: Moderadores
Registro en: Apr 2006
Estado:
Sin Conexión
Reputación: 3
|
RE: Regresar una cadena de una funcion
Che, no te quiero tirar abajo... pero eso no anda, se te va a salir a la mitad del programa. Lo correcto seria esto:
#include <stdio.h>
#include <string.h>
char* funcion()
{
char* cadena="Hola!";
char cad2[20];
char* puntero=cad2;
strcpy(puntero,cadena);
return cadena;
}
int main()
{
char* p;
p=funcion();
printf("%s",p); // imprime hola 1-grin
return 0;
}
Fijate que la funcion strcpy() toma punteros char de argumento. Tambien podes, si ya sabes cual va a ser el contenido declarar un puntero directamente asi:
De esta forma, se asigna la memoria que necesita para guardar "Hola!" y luego se le asigna un puntero, es equivalente a hacer esto en una forma mas corta...
char cadena[]="Hola";
char* puntero=cadena;
Espero que te sea de utilidad.
Edit: Perdon me mande una burrada, tenia que devolver puntero en vez de cadena.
|
|
| 11-07-2007 01:56 PM |
|
 |
Snoopydog
Usuario PL
Mensajes: 27
Grupo: Registrado
Registro en: Jun 2007
Estado:
Sin Conexión
Reputación: 0
|
RE: Regresar una cadena de una funcion
bueno no he tenido problemas hasta ahora con el codigo, sin embargo he hecho las modificaciones ke me sugeriste y todo funciona igual, puedes poner el mensaje como solucionado, si llegase a haber mas probelmas lo presentare en el foro 
gracias por todo
|
|
| 11-09-2007 09:52 PM |
|
 |
german
Moderador
    
Mensajes: 224
Grupo: Moderadores
Registro en: Apr 2006
Estado:
Sin Conexión
Reputación: 3
|
RE: Regresar una cadena de una funcion
jejejj, disculpame le mande cualquiera, para resumir, el programa podria ser a si:
#include <stdio.h>
#include <string.h>
char* funcion()
{
char* cadena="Hola!";
static char cad2[20];
strcpy(cad2,cadena);
return cad2;
}
int main()
{
char* p;
p=funcion();
printf("%s",p); // imprime hola 1-grin
return 0;
}
Lo unico que necesitas saber es que estas devolviendo un puntero, es decir, una direccion de memoria, entonces cuando se termina de ejecutar la funcion la memoria que utilizo es liberada, y el puntero es devuelto. Pero el mismo apunta a cualquier lado, ya que la memoria a la que apuntaba a sido liberada. Para solventar esto podemos hacer:
Con 'static' le decimos al compilador que guarde la variable aunque haya terminado la funcion (seria una variable global).
Alternativamente podes hacer que la funcion tome como parametro la cadena que vas a escribir, por ejemplo:
void funcion(char* cadena){
// codigo
}
Eso es todo, y disculpame por mariarte tanto.
|
|
| 11-09-2007 10:35 PM |
|
 |