Hola Susana,<br><br>
<div class="gmail_quote">On Tue, Apr 27, 2010 at 12:27 PM, Susana Sacie <span dir="ltr"><<a href="mailto:susanitis@gmail.com">susanitis@gmail.com</a>></span> wrote:<br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">el caso es que tengo un tipo structurado:<br><br>struct parse {<br>    char        format_id[4];<br>    char        version[4];<br>
    u_int32_t    length;       <br>    u_int16_t    num_images;<br><br>//tiene una longitud de 14 bytes , sin embargo sizeof me devuelve:<br><br>sizeof(struct parse)= 16<br><br>//si hago sizeof() de format_id, version,length y num_images me devuelve respectivamente 4,4,4,2=14. ¿porque el tipo estructurado no me devuelve el valor correcto?<br>
<br></blockquote>
<div>El "problema" que tienes está asociado al tema del alineamiento de los campos de una estructura. Efectivamente, el tamaño de cada campo de una estructura no siempre equivale al tamaño de la estructura en sí. Esto es porque el compilador decide organizar los datos para que ocupen bloques de bytes que sean múltiplos del mayor tamaño de un campo. En tu caso, se elige 'length' como el tamaño mayor porque ocupará 4 bytes. Por lo tanto, el compilador creará una estructura de 4*n bytes. En el primer bloque de 4 bytes, caben los 4 caracteres de 'format_id', seguidos de los 4 bytes de 'version' que ocupan otro bloque de 4 bytes. El tercer bloque de 4 bytes es el mismo 'length'. El úlitmo bloque de 4 bytes contiene el campo 'num_images', pero éste sólo ocupa 2 bytes. Esto significa que hay 2 bytes sin usar.</div>

<div> </div>
<div>Al final, la estructura requiere 4 bloques de 4 bytes y por tanto 16 bytes.</div>
<div> </div>
<div>Sugiero consultar el capítulo 11 del curso de C++. En particular, visita este enlace: <a href="http://c.conclase.net/curso/index.php?cap=011b#STR_sizeof">http://c.conclase.net/curso/index.php?cap=011b#STR_sizeof</a></div>

<div> </div>
<div> </div>
<div>Espero que esto te sirva.</div>
<div> </div>
<div>Steven</div>
<div> </div></div>