(C语言)计算字符串长度,使用 sizeof和strlen中的坑

最近刷leetcode,遇到很多字符串处理的问题,经常需要用到统计一下字符串长度,踩了很多坑,分享一下。

一、使用strlen计算

1.引用

2.声明字符串时,如果同时初始化,需要有充足的空间,留有存储‘\0’的空间。

解释一下就是,

例如char str[]="12345";//声明,同时初始化

此时字符串中实际存储为“12345\0”,此时strlen(str)遇到‘\0’,停止基数,返回数组长度5;

若char str[5]="12345",此时字符串中实际存储为“12345”,没有额外空间存储‘\0’,strlen(str)返回的是一个无意义的随机值(我觉得是这样),也就是说,如果定义的字符串长度<实际的字符串长度+1,strlen函数就没有意义,无法使用

相反的,若定义的字符串长度>=实际的字符串长度+1,则结果正确。

二、使用sizeof计算

1.sizeof(str),这里str必须为字符数组名,如果传入的是一个char指针(不含*),则返回的是指针类型的宽度一定为4

假设定义字符串char *str,区分:sizeof(*str)等价于sizeof(char)返回1,sizeof(str)等价于sizeof(char *)返回4,均没有办法活动字符串长度。

2.sizeof返回的是该字符串占用内存的大小。

char str[20]="12345";sizeof(str)返回20;

char str[2]="12345",sizeof(str)返回2;

char str[]="12345",sizeof(str)返回6,此时包含隐含的‘\0’字符;

 

你可能感兴趣的:((C语言)计算字符串长度,使用 sizeof和strlen中的坑)