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

¿como hacer return a una string?

Estas en el tema de ¿como hacer return a una string? en el foro de C/C++ en Foros del Web. esa es mi duda como puedo devolver una cadena de caracteres tipo char para luego poder usar cout....
  #1 (permalink)  
Antiguo 07/11/2010, 18:22
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 13 años, 5 meses
Puntos: 0
¿como hacer return a una string?

esa es mi duda como puedo devolver una cadena de caracteres tipo char para luego poder usar cout.
  #2 (permalink)  
Antiguo 08/11/2010, 08:31
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿como hacer return a una string?

deberías devolver un char*
  #3 (permalink)  
Antiguo 12/11/2010, 15:33
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: ¿como hacer return a una string?

si pero ¿podria ser mas especifico? es que hice una funcion que trasforma una variable tipo int a una cadena de caracteres; al principio de la funcion declaro:
char numberstr[10];
luego asigno el correspondiente numero a cada casilla, coloco 0 al final y luego pongo:
return numberstr;

El prototipo de la funcion es: char* inttostr(int const number,int const lenght);
entonces en la funcion main pongo
int main()
{
char str1[10];


int a;
cin>>a;
int lenght=intlen(a);//lenght es la cantidad de digitos del numero
str1=inttostr(a,lenght); //aqui me da error

cout<<str1<<endl;
system("pause");
return 0;
}
hice depuracion y al parecer la funcion inttostr funciona correctamente.¿como hago para colocar la cadena de caracteres en str1[10]?

Última edición por MichaelDunn; 12/11/2010 a las 15:46
  #4 (permalink)  
Antiguo 12/11/2010, 16:33
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿como hacer return a una string?

pon los mensajes de error exactos, pues. Leelos, y te ayudarán a encontrar la solución.
  #5 (permalink)  
Antiguo 12/11/2010, 18:41
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: ¿como hacer return a una string?

Primero de todo la variable a parece no estar declarada.
Segundo eso no te va a funcionar porque la variable que tu dices esta declarada asi:
char numberstr[10];
Se aloja en memoria local. Al terminar la funcion esta ser perdera o cera pisada por otra informacion.

Te recomiendo que uses malloc para asignar memoria dinamica y depues hace return numberstr;
Seria asi la sentencia:
numberstr = (char *) malloc ((lenght +1 ) * sizeof(char) );

La otra seria uqe cambies el prototipo de la funcion y le agregues un argumento. usea un char * micadena.

Entonces haces las modificaciones en micadena desde la funcion y no necesitas devolver nada. Son dos variantes.

Con respecto a lo de no compilar habria uqe ver el codigo completo.
  #6 (permalink)  
Antiguo 12/11/2010, 19:23
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: ¿como hacer return a una string?

bueno el compilador dice:"no se puede realizar la conversion de 'char*' a 'char [10]'".

Al finalizar la funcion yo se que se pierde las variables, pero ¿entonces no hay forma de devolver una cadena de caracteres con return?¿estas seguro?
y ¿eso de malloc nesesita incluir alguna libreria?
  #7 (permalink)  
Antiguo 12/11/2010, 19:44
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: ¿como hacer return a una string?

Lo que se devuelve es el puntero hacia la cadena. Si esta esta en memoria local se perdera. Simplemente es eso. Por eso te digo que uses el malloc o lo otro que te dije.

Igualmente ahora que veo, estas usando c++. Simplemente has un new de esta manera.
numberstr = new char[lenght +1];

Con eso tiene que funcionar.
  #8 (permalink)  
Antiguo 12/11/2010, 19:49
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 10 meses
Puntos: 95
Respuesta: ¿como hacer return a una string?

pasa la cadena por referencia, de esa manera no hay necesidad de regresar ningun valor y no te lias.
Ademas, siempre que utilizas funciones y uno de tus argumentos es un array, una buena practica de programacion es pasar los arrays por referencia, y no por valor.

Cuando pasas los arrays por referencia, la funcion modifica directamente el array.
Cuando pasas los arrays por valor, la funcion crea una copia del array y cuando termina de trabajar con el array, lo regresa.

Imaginate si tienes una funcion recursiva, cuyo argumento sea un array dinamico (o un array[100] por hacerlo "grande") y cada vez que la funcion se llame a si misma, una copia del array se va a almacenar en memoria. No bastaran muchas llamadas recursivas, antes de que te mande el error " segmentation fault" en otras palabras, te vas a quedar sin memoria.

La otra ventaja cuando pasas valores por referencia, y no por valor, es que cuando manejas este tipo de estructura de datos (o alguna estructura de datos en general), el rendimiento y rapidez de una llamada por referencia es mayor que a la eficiencia de un pase por valor.

como ya comento sam90, lo unico que tienes que utilizar es un puntero en tu funcion, agregandole un *
pero cuando llamas a la funcion, tienes que incluir un & para decirle al compilador que estas pasando por referencia, y no por valor.

Por eso el compilador te esta diciendo que no se puede convertir char * a char[10]

tu funcion puede ser

void mifuncion(char *micadena)
{
//...tu codigo
}

int main()
{
char micadena[10];
mifuncion(&micadena);
return 0;
}

Etiquetas: return, 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 23:00.