Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: abreu20011 en 9 Agosto 2012, 17:26 pm



Título: Tamaño bytes para una estructura
Publicado por: abreu20011 en 9 Agosto 2012, 17:26 pm
Saludos :)

Vengo con una duda a ver si alguien puede ayudarme un poco  ^^ Es un tema de concepto, que no sé si estoy haciendo bien algo.

Hablo de la función memset y como la he aplicado. Se supone que esta función sirve para inicializar una matriz a 0, indicandole el tamaño en bytes que queremos que ocupe.

Pero, ¿y cuando esa matriz es una matriz de estructura?
Mi código funciona, pero no tengo muy claro sí está bien programado:

Código:
typedef struct
{
char Nombre[20];
char Direccion[30];
int Telefono;
int Nota;
nDias Dias;
}fichaPersona;

fichaPersona Alumnos[20];

memset(Alumnos, 0, sizeof(int) * 20);

al parametro de sizeof le he dicho que es un entero. Pero la matriz Alumnos que tiene 20 posiciones, esta compuesta por 5 enteros y dos char.

¿Es correcto entonces poner sizeof(int) o tendria que poner otra cosa? A mi entender un solo entero tiene que ocupar menos bytes que 6 variables unidas :S

Muchas gracias! :)
Un saludo


Título: Re: Tamaño bytes para una estructura
Publicado por: rir3760 en 9 Agosto 2012, 19:41 pm
No, no es correcto ya que no colocas todos los bytes del array a cero.

Una forma mejor es utilizando el nombre del array y su numero de elementos:
Código
  1. fichaPersona Alumnos[20];
  2. memset(Alumnos, 0, sizeof *Alumnos * 20);

También deberías eliminar la literal 20 (en su lugar utiliza una macro).

Un saludo


Título: Re: Tamaño bytes para una estructura
Publicado por: abreu20011 en 9 Agosto 2012, 20:20 pm
No, no es correcto ya que no colocas todos los bytes del array a cero.

Una forma mejor es utilizando el nombre del array y su numero de elementos:
Código
  1. fichaPersona Alumnos[20];
  2. memset(Alumnos, 0, sizeof *Alumnos * 20);

También deberías eliminar la literal 20 (en su lugar utiliza una macro).

Muchisisisisimas gracias rir3760 ^^
Ya decía yo que no podía estar bien :)

Ahora mismo voy a mejorar mi código :D
Y gracias por el consejo de la macro, no la use por que es un ejercicio, pero está bien saberlo ^^

Un saludo y muchas gracias de nuevo :)


Título: Re: Tamaño bytes para una estructura
Publicado por: rir3760 en 10 Agosto 2012, 17:53 pm
Si debes asignar el valor cero varias veces en el programa lo mejor es utilizar la función "memset".

Por otra parte si solo deseas esa asignación como valor inicial puedes utilizar:
Código
  1. fichaPersona Alumnos[20] = {{0}};
Con ello en todos los elementos del array sus campos se inicializan con 0 (o 0.0 o NULL, de acuerdo al tipo de cada uno).

Un saludo


Título: Re: Tamaño bytes para una estructura
Publicado por: BlackZeroX en 11 Agosto 2012, 01:35 am
También lo puedes dejar de esta manera:

Código
  1. fichaPersona Alumnos[20];
  2. memset(Alumnos, 0, sizeof Alumnos);

Código
  1. sizeof Alumnos
Es una abreviación de:
Código
  1. sizeof *Alumnos * 20
Aun que una equivalencia es usar
Código
  1. sizeof(fichaPersona) * 20
.

Dulces Lunas!¡.