strlen与sizeof区别
qyuwwsstrlen
strlen是函数,头文件为#include<string.h>,是求字符串长度!
sizeof
sizeof不是函数,是关键字,求类型的字节长度!
区别
strlen遇见'\0'停止,而sizeof求长度的时候会将'\0'当成一个字符来计算!接下来我们用代码来表达它俩的区别!
int main()
{
char* ch1 = "abcde";//字符串 字符串末尾自动生成一个'\0'字符
char ch2[] = "abcde";//字符串数组 是将字符串赋值给数组
char ch3[] = { "abcde" };//ch3是ch2的另一种表达形式
int len1 = strlen(ch1);
int len2 = strlen(ch2);
int len3 = strlen(ch3);
printf("%d %d %d", len1, len2, len3);
return 0;
}
运行结果:
如果是sizeof的话:
int main()
{
char* ch1 = "abcde";//字符串 字符串末尾自动生成一个'\0'字符
char ch2[] = "abcde";//字符串数组 是将字符串赋值给数组
char ch3[] = { "abcde" };//ch3是ch2的另一种表达形式
//int len1 = strlen(ch1);
//int len2 = strlen(ch2);
//int len3 = strlen(ch3);
int sz = sizeof(ch2) / sizeof(ch2[0]);
printf("%d", sz);
//printf("%d %d %d", len1, len2, len3);
return 0;
}
运行结果:
为什么sizeof会比strlen多一个呢?因为字符串是包含最后一个字符'\0'.
其他情况:
上面可知,strlen是遇见'\0'停止,所以我们看接下来的代码!
此时strlen求出的便是随机值 但是sizeof求出的便是真正的长度!
如果在ch的末尾加上一个'\0'字符 结果就是预期的结果!
如果懂的话,请 大家给我点赞支持一下吧!
jackleeonlyone: “再”在进入下层链表查找提取多层关键节点
jackleeonlyone: 提取出链表中的关键姐点,改下错别字
m2on: A删除缓存,B读取数据库,A写入数据库,B写入缓存。内存是B,数据库是A
明 日 香: 优质好文,博主的文章细节到位,内容干货很多,感谢博主的分享,期待博主持续带来更多好文。
weixin_45897442: 先更新缓存在更新数据库,怎么引发并发问题的