Enviar Respuesta  Enviar Tema 
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
Mensaje: #1
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 1-smile

11-05-2007 09:45 PM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
german
Moderador
*****
Moderadores

Mensajes: 224
Grupo: Moderadores
Registro en: Apr 2006
Estado: Sin Conexión
Reputación: 3
Mensaje: #2
RE: Regresar una cadena de una funcion

esta bien la funcion, pero mal la funcion, te falto el * en la declaracion.

Código:
char* funcion(char* var)


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
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
Snoopydog
Usuario PL


Mensajes: 27
Grupo: Registrado
Registro en: Jun 2007
Estado: Sin Conexión
Reputación: 0
Mensaje: #3
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 1-smile saludos .

11-06-2007 01:44 PM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
Snoopydog
Usuario PL


Mensajes: 27
Grupo: Registrado
Registro en: Jun 2007
Estado: Sin Conexión
Reputación: 0
Mensaje: #4
RE: Regresar una cadena de una funcion

Hola german, por fin se ha logrado 1-wink, ya es posible mandar los valores ke deseaba, dejo un ejemplo:

char* funcion();

char* funcion()
{char cadena[20]="Hola";
char* puntero;
strcpy(puntero,cadena);
return puntero;}

int main()
{char* p;
p=funcion();
printf("%s",p); // imprime hola 1-grin
return 0;}

Te agradesco tu ayuda y tu atencion, este es un ejemplo base para poder mandar cadenas de una funcion a otra 1-grin
El problema ha sido resuelto muchisimas gracias. saludos 1-smile

11-06-2007 08:11 PM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
german
Moderador
*****
Moderadores

Mensajes: 224
Grupo: Moderadores
Registro en: Apr 2006
Estado: Sin Conexión
Reputación: 3
Mensaje: #5
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:

Código:
#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:

Código:
char* cadena="Hola!";

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...

Código:
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.021

11-07-2007 01:56 PM
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
Snoopydog
Usuario PL


Mensajes: 27
Grupo: Registrado
Registro en: Jun 2007
Estado: Sin Conexión
Reputación: 0
Mensaje: #6
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 1-smile

gracias por todo 1-razz

11-09-2007 09:52 PM
Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
german
Moderador
*****
Moderadores

Mensajes: 224
Grupo: Moderadores
Registro en: Apr 2006
Estado: Sin Conexión
Reputación: 3
Mensaje: #7
RE: Regresar una cadena de una funcion

jejejj, disculpame le mande cualquiera, para resumir, el programa podria ser a si:

Código:
#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:

Código:
static char cad2[20];

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:

Código:
void funcion(char* cadena){
//  codigo
}


Eso es todo, y disculpame por mariarte tanto.

11-09-2007 10:35 PM
Visita el website del usuario Encuentra todos los mensajes de este usuario Cita este mensaje en tu respuesta
Enviar Respuesta  Enviar Tema 

Ver la Versión para Impresión
Mandar este Tema a algún Amigo
Subscríbete a este Tema | Agrega este Tema a Tus Favoritos

Salto de Foro: