您的位置:首页 > 其它

sizeof()和strlen()不得不说的故事

2015-09-19 22:06 387 查看

sizeof()

sizeof()是判断一个对象或者一个类型所占内存字节数的操作符。

//32bit
int a;
int b[]={1,2}
sizeof(a)//4byte
sizeof(b)//数组对象,计算数组元素所占的总长度 4byte*2= 8byte

char *p0;
sizeof(p0)//4 byte

char *p1="Tencent";
sizeof(p1);//4 byte p1是指针,指针占4字节

char p2[]="Tencent";
sizeof(p2);//8byte p2是数组对象,计算数组所有元素占内存的总长度,字符串的\0也算在内


char data[0] 求sizeof()

struct data
{
char *p;
char a[0];
};


在结构体会忽略char a[0]的大小,因为根本没有分配内存。

sizeof(data) = 4;

如果不在结构体当中, char a[0]会报错。

strlen()

函数原型:size_t strlen(const char *string);

功能:它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含“\0”)。

char *p1 = "Tencent";
strlen(p1);//7 byte,不包含\0

char p2[]="Tencent";
strlen(p2);//7 byte


比较

sizeof()计算传入对象所占内存的大小,而strlen()是从传入对象处开始扫描直至第一个等于’\0’处的计数截止。

对于字符串类型来说:

1.传入数组类型,sizeof会计算数组所有元素所占内存的大小,

‘\0’也计入在内。而传入指针(指向字符串)时,计算的是指针本身所在内存的大小。

2.对于strlen(),不管传入数组类型还是指针,只有内容相同,strlen()的结果都一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  strlen sizeof