sizeof与strlen
- sizeof()计算一个类型的空间大小
- strlen只用于计算字符串长度,寻找'\0'的位置,但是不包括'\0'位置
- 例一:
int b=strlen("\0b"); int a=sizeof("\0b");
输出b=0;a=3; a为计算的该字符串所占的空间大小;
- 例二:
char a[10]; char *b=new char[10]; int x=sizeof(a); //x=10; int y=sizeof(b); //y=4; int z=sizeof(*b); //z=1;
x计算的是数组所占的空间大小;
y计算的是字符指针b所占的空间大小,32位机中所有的指针变量所占的空间大小为4个字节;
z计算的是指针b所指向的第一个字符所占的空间大小,char型空间为1个字节; - 例三:
char a[10]; char *b=new char[10]; int x=strlen(a); //随机数 int y=strlen(b); //随机数
strcpy(b,"hello");
int z=strlen(b); //z=5; - sizeof在计算结构体变量的空间时,需要遵循两个规则:
1)结构体每个成员的首地址是成员大小的整数倍,有需要会在成员之间填充字节;
2)结构体的总空间大小为最宽基本成员类型的整数倍。在寻找最宽成员时,需要将复合类型“打散”来看,比如结构体内包含另一个结构体,则把另一个结构体拆开来看。
struct S1{ int a; char b; };//4+1+3=8 struct s2{ char c; S1 s; char d; };//1+3+4+1+1+2=12,12是int型空间的整数倍