Arreglo de caracteres
Publicado por Clayder (16 intervenciones) el 16/12/2007 23:31:57
Hola a todos:
Vengo de programar en Java y ahora trato de aprender algo de C++. Hace poco deje una entrada sobre punteros, la cual me fue claramente respondida.
Ahora tengo una duda con respecto a los arreglos de caracteres, por ejemplo en estas lineas de codigo:
char c[10] = "Hola Mundo";
cout<<c<<endl;
Al ejecutar esas lineas de codigo me da la siguiente entrada:
Hola Mundoé♥
Me intriga, el porqué los 2 caracteres adicionales, si mi arreglo fuera charc[11](con espacio para un caracter mas), entonces botaría limpio el Hola Mundo;... ¿a que se debe esto?
Ahora, si le agregara una linea mas como:
printf(c1);
Que viene a ser casi lo mismo, el resultado cambiaria el 'é' por el 'ä', como sigue:
Hola Mundoä♥
Hola Mundoä♥
Recuerdo algo que lei de la respuesta de fernando.gomez, sobre el espacio de memoria que el SO para crear objetos, exactamente fue asi:
"Así las cosas, cuando creas un objeto cualquiera, el SO determina el tamaño del objeto y 'reserva' una cantidad de memoria 'alineada' con el mínimo número de segmentos necesarios para que el objeto pueda ser creado. Es decir (en un sistema de 32 bits), si tienes un objeto cuyo tamaño es de 3 bytes, te será reservado un segmento (4 bytes), si tienes un objeto de 5 bytes te serán reservados dos segmentos (8 bytes), etcétera (a este proceso en el cuál te reserva por segmentos en lugar del número exacto de memoria se le llama "alineación" y puede variar en diferentes SOs o procesadores)."
No entendi muy bien lo de alineacion de memoria y porque un objeto de 3 bytes reserva 4 y uno de 5 reserva 8 bytes.
Bueno, disculpen la molestia por lo extenso de mi duda, espero que me respondan y poder aclarar mis dudas.
Gracias de antemano.
Saludos.
Vengo de programar en Java y ahora trato de aprender algo de C++. Hace poco deje una entrada sobre punteros, la cual me fue claramente respondida.
Ahora tengo una duda con respecto a los arreglos de caracteres, por ejemplo en estas lineas de codigo:
char c[10] = "Hola Mundo";
cout<<c<<endl;
Al ejecutar esas lineas de codigo me da la siguiente entrada:
Hola Mundoé♥
Me intriga, el porqué los 2 caracteres adicionales, si mi arreglo fuera charc[11](con espacio para un caracter mas), entonces botaría limpio el Hola Mundo;... ¿a que se debe esto?
Ahora, si le agregara una linea mas como:
printf(c1);
Que viene a ser casi lo mismo, el resultado cambiaria el 'é' por el 'ä', como sigue:
Hola Mundoä♥
Hola Mundoä♥
Recuerdo algo que lei de la respuesta de fernando.gomez, sobre el espacio de memoria que el SO para crear objetos, exactamente fue asi:
"Así las cosas, cuando creas un objeto cualquiera, el SO determina el tamaño del objeto y 'reserva' una cantidad de memoria 'alineada' con el mínimo número de segmentos necesarios para que el objeto pueda ser creado. Es decir (en un sistema de 32 bits), si tienes un objeto cuyo tamaño es de 3 bytes, te será reservado un segmento (4 bytes), si tienes un objeto de 5 bytes te serán reservados dos segmentos (8 bytes), etcétera (a este proceso en el cuál te reserva por segmentos en lugar del número exacto de memoria se le llama "alineación" y puede variar en diferentes SOs o procesadores)."
No entendi muy bien lo de alineacion de memoria y porque un objeto de 3 bytes reserva 4 y uno de 5 reserva 8 bytes.
Bueno, disculpen la molestia por lo extenso de mi duda, espero que me respondan y poder aclarar mis dudas.
Gracias de antemano.
Saludos.
Valora esta pregunta


0