Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: soyloqbuskas en 29 Septiembre 2015, 02:58 am



Título: return array char en C
Publicado por: soyloqbuskas en 29 Septiembre 2015, 02:58 am
Buenas a todos!

Tengo problemas para declarar una funcion que retorna un array de caracters.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. const int maxCharPalab=100;
  6. typedef char palabra[maxCharPalab];
  7.  
  8. const int maxCharInstruc=1000;
  9. typedef char instruccion[maxCharInstruc];
  10.  
  11. palabra leePalabras(instruccion instruc){
  12.  
  13.     palabra palab;
  14.  
  15.    //codigo...
  16.  
  17.    retrurn palab;
  18.  
  19. }
  20.  
  21.  

¿como debo declarar la funcion para que funcione correctamente con arrays?


Gracias, un saludo.


Título: Re: return array char en C
Publicado por: 0xFer en 29 Septiembre 2015, 04:01 am
No se puede. Lo que si puedes hacer es una función que retorne un puntero a un arreglo de caracteres.

Código
  1.  
  2. char* Funcion(){
  3.    char arreglo[100];
  4.  
  5.    return arreglo;
  6. }
  7.  
  8.  

Para tratar los caracteres del arreglo al que apunta el puntero tienes que cachar el puntero con otro puntero en la función que llame a la función que retorna el puntero.

Código
  1. main(){
  2.   char* palabra = Funcion();
  3.   palabra[0]; //primer caracter del arreglo apuntado
  4.   palabra[1]; //segundo caracter y asi
  5. }
  6.  

Como el arreglo es de 100 caracteres entonces tienes que agregar un caracter nulo en donde creas que termina la palabra guardada por el arreglo. esto es para que no tomes valores basura.

Código
  1.   char palabra[5] =  {'h','o','l','a','\0'};
  2.  
  3.   for( ;*palabra;palabra++)  //recorre el  arreglo hasta encontrar un caracter nulo
  4.        printf("%c",*palabra); //imprime los caracteres del arreglo
  5.  
  6.    printf("%s",palabra); //también se puede asi.
  7.  

El ejemplo era para un arreglo de 5 elementos, el chiste es agregar un caracter nulo('\0') al final de la palabra



Título: Re: return array char en C
Publicado por: Luchoz95 en 29 Septiembre 2015, 05:23 am
Concuerdo con lo que dice 0xFer, pero deberías trabajar con la memoria dinámica, osea deberías definir un puntero e inicializarlo con malloc().

El ejemplo que dio 0xFer , seguramente funcionara, pero solo con ese código, ya que el puntero se guardo en el tope de la pila al llamar la función, cuando la función termine, el tope va hacer otro y el puntero va hacer solo basura.

El uso de la memoria dinámica en C es esencial, te recomiendo que estudies muy bien como funciona esta memoria y las funciones , malloc(), realloc(), y free().

Saludos