Al principio, cuando empezaba a programar, yo me quejaba mucho de esa tonta manía de C que no me dejaba devolver arrays como resultado de una función.
Aunque al final, devolver arrays es una tontería, gasta memoria, gasta tiempo y termina siendo más fácil solucionarlo todo con un puntero.
Pero bueno, si realmente queremos devolver un array, siempre podemos meterlo dentro de un registro. Probando con una cadena de caracteres:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> #include <string.h> typedef struct { char cadena[1000]; } t_array; t_array devuelvo() { t_array otroarr; printf("\nDirección de cadena: %X\nCadena: %s\n", &otroarr, otroarr.cadena); strcpy(otroarr.cadena, "ESTE STRING APARECE VARIAS VECES EN EL VOLCADO DE MEMORIA"); printf("\nDirección de cadena: %X\nCadena: %s\n", &otroarr, otroarr.cadena); return otroarr; } int main() { t_array array; array=devuelvo(&mem); printf("\nDirección de cadena: %X\nCadena: %s\n", &array, array.cadena); } |
Pingback: Bitacoras.com /
Yo soy partidario de hacer eso con un puntero.
Mandas un puntero al array y a correr ^^
Una vez implementé algo parecido pero que devolvía estructuras. La gracia estaba en que podía ser cualquier tipo de estructura (tenía 9 o 10 en total). Al final lo solucioné usando los temidos punteros a void.
Yo también soy partidario de hacerlo con punteros, como digo en el post… pero sabes que cuando alguien me dice:
«¿y no se puede devolver un array como resultado de una función?»
tras advertirle lo de los punteros, le digo, pero se puede!
Pues a mí los punteros a void me encantan, hay que tener un poco de cuidado, pero mira, funcionan… luego en C++ somos más elegantes y usamos templates 🙂