elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tamaño bytes para una estructura
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tamaño bytes para una estructura  (Leído 1,894 veces)
abreu20011

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Tamaño bytes para una estructura
« 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


« Última modificación: 9 Agosto 2012, 19:37 pm por abreu20011 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Tamaño bytes para una estructura
« Respuesta #1 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


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
abreu20011

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Tamaño bytes para una estructura
« Respuesta #2 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 :)
« Última modificación: 9 Agosto 2012, 20:26 pm por abreu20011 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Tamaño bytes para una estructura
« Respuesta #3 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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.142


I'Love...!¡.


Ver Perfil WWW
Re: Tamaño bytes para una estructura
« Respuesta #4 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!¡.
« Última modificación: 11 Agosto 2012, 01:39 am por BlackZeroX (Astaroth) » En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines