Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Retornar string en c

Estas en el tema de Retornar string en c en el foro de C/C++ en Foros del Web. Buen día gente, tengo un problema. Quiero retornar un puntero a string de una función en c. El tema es que si creo la variable ...
  #1 (permalink)  
Antiguo 25/10/2013, 14:38
 
Fecha de Ingreso: octubre-2012
Mensajes: 33
Antigüedad: 11 años, 6 meses
Puntos: 0
Retornar string en c

Buen día gente, tengo un problema. Quiero retornar un puntero a string de una función en c. El tema es que si creo la variable char* toReturn y opero sobre ella al retornarla me dice que estoy retornando un puntero a variable local. Se puede hacer sin usar malloc ni asaje de punteros por parámetros?
  #2 (permalink)  
Antiguo 25/10/2013, 18:47
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Retornar string en c

Si no me equivoco en ANSI C no se puede. Pero, cual es el problema en hacer...

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void copy(char *buffer)
  5. {
  6.     strcpy(buffer, "Hola, mundo!");
  7. }
  8.  
  9. int main(int argc, char **argv)
  10. {
  11.     char string[20];
  12.     copy(string);
  13.     printf("%s\n", string);
  14.    
  15.     return 0;
  16. }

  #3 (permalink)  
Antiguo 26/10/2013, 05:52
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Retornar string en c

En C++ si se puede:

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. string Copiar()
  6. {
  7.   return "Una cadena";
  8. }
  9.  
  10. int main()
  11. {
  12.    string Cosa = Copiar();
  13.    
  14.    return 0;
  15. }
  #4 (permalink)  
Antiguo 26/10/2013, 07:47
Avatar de iblancasa  
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: Retornar string en c

Cita:
Iniciado por sfermat Ver Mensaje
Buen día gente, tengo un problema. Quiero retornar un puntero a string de una función en c. El tema es que si creo la variable char* toReturn y opero sobre ella al retornarla me dice que estoy retornando un puntero a variable local. Se puede hacer sin usar malloc ni asaje de punteros por parámetros?
¿Podríamos ver esa función?

Un saludo.
  #5 (permalink)  
Antiguo 29/10/2013, 18:54
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: Retornar string en c

La forma que solicita no es viable en C. Debe de bien usar malloc / calloc o pasar una referencia para almacenar el resultado.

En tal caso especifica un poco más como sería la llamada y que deseas colocar en el retorno.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #6 (permalink)  
Antiguo 03/11/2013, 21:47
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Retornar string en c

Sí se puede. Te explicaré antes de darte un ejemplo. Cuando tú creas una variable en una función, esta se vuelve temporal y local, por consiguiente, se borra al finalizar la función. Pero, C te permite crear una variable estática, este tipo de variable no se borrará y estará durante todo el tiempo de ejecución del programa.

Te dejo un pedazo de un código mío donde hago uso de ella.

Código C:
Ver original
  1. const char *
  2. header_make (int numm)
  3. {
  4.   static char tmp[255] = {0}; /* static = safe */
  5.   snprintf(tmp, sizeof tmp, SGET "%i" EGET, numm);
  6.  
  7.   return tmp;
  8. }

Saludos.
  #7 (permalink)  
Antiguo 07/11/2013, 11:21
 
Fecha de Ingreso: octubre-2012
Mensajes: 33
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Retornar string en c

gracias. Estaba convencido que no se podia pero por ahi tenia algun error

Etiquetas: retornar, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:00.