Autor Tema: Paso de array a una función con ccs  (Leído 1260 veces)

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

Desconectado Manel30

  • PIC10
  • *
  • Mensajes: 1
Paso de array a una función con ccs
« en: 21 de Febrero de 2014, 07:58:28 »
Hola,

quería comentaros una duda a cerca de c (usando el compilador de ccs)y su comportamiento con los arrays. Resulta que estoy intentando meter como parametro de entrada de una función un array de tamaño conocido. Esta función hace un byte destuffing, modifica el contenido y genera un nuevo array de salida con los nuevos datos y tamaño diferente al array de entrada.
Dentro de la función estoy haciendo uso de sizeof (array) para conocer el tamaño de dicho array de entrada pero siempre me devuelve la posición de memoria en vez del contenido. Estoy haciendo algo así:



// array de entrada de tamaño 10

int *Destuffing(int array[]){
   
  int i,j;

  int s = sizeof(array) /sizeof (int);
  int output;                //aqui me da un error de compilación y me dice que tiene que evaluar una contante. Si fijo s a un valor por ejemplo 10 no hay problema
  output[0]= 0x10;
  output[8]=0x10;
  output[9]=0x03;   

  for(i=1,j=1;i<sizeof(array)-3;i++,j++){                 // empezamos en 1 para quitarnos el DLE de inicio y evitamos los dos últimos caracteres de terminación de trama
    if(array==0)
    {
      output[j]=array[++i];
    }
    else{
      output[j]=array;
    }
  }

 return output;
}

El problema que encuentro es tanto conseguir que el array de entrada se bien leido, ya digo que solo leo la posición de memoria, como definir de forma dinamica el array de salida (output). Esta función se llama muchas veces y el array de entrada en cada llamada puede ser de tamaño diferente.

Una guía es de agradecer. Gracias por la ayuda

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Paso de array a una función con ccs
« Respuesta #1 en: 21 de Febrero de 2014, 10:19:52 »
asi no puedes hacerlo ya que no se reconoce el tamaño del array, ni tampoco puedes crear un array sin predefinirlo, es decir int output tendria solo 1 direccion reservada, ademas no podrias usar ese array a no ser que lo declarases estatico puesto que una vez sale de la funcion esa memoria se "borra", yo lo haria asi:

void Destuffing(int *in, int *dest, int size) {
 int i,j;
  dest[0]= 0x10;
  dest[8]=0x10;
  dest[9]=0x03;  

  for(i=1,j=1;i<size-3;i++,j++){          
    if(array[ i]==0) //no entiendo que pretendes hacer aqui porque estaba mal puesto
    {
      dest[j]=array[++i];
    }
    else{
      dest[j]=array[ i]; //esto tambien estaba mal, o no entiendo que pretendias
    }
  }
}

para llamar a la funcion lo tendrias que hacer asi:

Destuffing(&array[0],&temp[0],sizeof(array));

temp seria el destino de la modificacion, o bien declaras un array global como medio temporal, o en la propia funcion, o segun veas tu, recuerda que este array siempre sea IGUAL o MAYOR que el array de entrada, sino obtendras modificaciones en la ram reservada y acabaria siendo un caos.