| |||
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 |
| |||
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. |
| |||
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? |
| |||
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. |
| |||
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; }
__________________ Visita mi blog donde escribo acerca de desarrollo web y emprendimiento Sigueme en Twitter: @alanchavezv |
Etiquetas: |