strlen和sizeof的区别

strlen是一个函数,用来计算字符串的长度。
#include <string.h>
size_t strlen(const char *s);

char test[4] = {'t','e','s','t'};
此时strlen(test)的结果是什么?
答案是无法预知。
因为字符串"test"没有以字符'\0'结束,
而字符't'后面的地址上的数据是无法预知的,
并且strlen计算字符串的长度是以'\0'作为结束标志的。
这时strlen的结果就是非预期的,从而导致程序出错。
所以,必须在做字符串操作时必须很有意识的在尾处补'\0'字符。

char* p;
此时strlen(p)的结果是什么?
结果同样是不可预测的。
因为指针变量p没有被初始化,所以p的值是未知的。
所以p指向的存储器位置所对应的值也是未知的。
所以,变量特别是局部变量声明时必须有意识的去进行初始化。

sizeof是一个运算符,用来计算变量或一个结构的长度。
对sizeof运算符而言,无论变量是否初始化其结果都是一致的。

char test[4];
无论字符串test是否被初始化,sizeof(test)的值总是4。

char *p;
sizeof(p)的结果为4;
char *p = malloc(10);
sizeof(p)的结果还是为4。
无论指针p是否被初始化,对于sizeof运算符而言,p只是一个指针变量。
而任何类型的指针变量,都是占用4个字节。
这是因为指针即地址,对于32位操作系统而言,其虚拟地址范围达到4Gb,
4个字节正好可以指向4Gb地址的任何位置。
所以指针变量的大小也就是4字节了。
那对于64位操作系统,指针变量应该会占用8个字节?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值