return array char en C

Iniciado por soyloqbuskas, 29 Septiembre 2015, 02:58 AM

0 Miembros y 1 Visitante están viendo este tema.

soyloqbuskas

Buenas a todos!

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


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int maxCharPalab=100;
typedef char palabra[maxCharPalab];

const int maxCharInstruc=1000;
typedef char instruccion[maxCharInstruc];

palabra leePalabras(instruccion instruc){

     palabra palab;

    //codigo...

    retrurn palab;

}



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


Gracias, un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

0xFer

#1
No se puede. Lo que si puedes hacer es una función que retorne un puntero a un arreglo de caracteres.

Código (cpp) [Seleccionar]


char* Funcion(){
   char arreglo[100];
   
   return arreglo;
}



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 (cpp) [Seleccionar]

main(){
  char* palabra = Funcion();
  palabra[0]; //primer caracter del arreglo apuntado
  palabra[1]; //segundo caracter y asi
}


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.


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


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

Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

Luchoz95

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