Otrzymuję nietypowe zachowanie z mojego kodu, który brzmi następującoZachowanie operatora sizeof w C
#include<stdio.h>
struct a
{
int x;
char y;
};
int main()
{
struct a str;
str.x=2;
str.y='s';
printf("%d %d %d",sizeof(int),sizeof(char),sizeof(str));
getch();
return 0;
}
Dla tego kawałka kodu otrzymuję komunikat:
4 1 8
Jako mojego wiedza struktura zawiera zmienną całkowitą o rozmiarze 4 i zmienną char o rozmiarze 1, dlatego rozmiar struktury a powinien wynosić 5. Ale jak to się dzieje, że rozmiar struktury to 8. Używam wizualnego kompilatora C++. Dlaczego to zachowanie?
W argumentach 'printf()' powinieneś rzucić wartości 'sizeof' na' (int) '... lub' (unsigned long) 'i użyć' "% lu" '... lub, jeśli mieć C99, użyj '"% zu "'. – pmg
@pmg: Dokładnie. Ponieważ 'sizeof()' zwraca wartość typu 'size_t'. –