这篇文章主要介绍了C语言中关于计算字符串长度的几种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
计算字符串长度的几种方式
C语言计算字符串长度,可以手动计算也可以使用库函数或者sizeof()操作符。
- 自定义函数求长度
- 使用strlen()函数
- 使用sizeof()操作符
自定义函数
int cont_str(char *s)
{
int i = 0;
while ( str[i++] != '\0');
return --i;
}
使用string头文件中的strlen()函数
strlen(str); //假设str为待求的字符串数组名
使用sizeof()操作符
int len=sizeof(str)/sizeof(str[0])-1; //假设str为待求的字符串数组名
注意:
strlen()
函数求出的字符串长度为有效长度,既不包含字符串末尾结束符 ‘\0’;sizeof()
操作符求出的长度包含字符串末尾的结束符 ‘\0’;
当在函数内部使用sizeof()求解由函数的形参传入的字符数组的长度时,得到的结果为指针的长度,既对应变量的字节数,而不是字符串的长度,此处一定要小心。(当数组或者字符串(可以理解为数组)作为函数参数是,是会当做指针来使用,指针的长度由编译器决定,大多数为4个byte. )
例如:
void strlen(char* str)
{
int length;
length = sizeof(str)/sizeof(str[0]); //str为4个字节,str[0] = 1
}
计算字符串长度,使用sizeof和strlen的坑
最近刷leetcode,遇到很多字符串处理的问题,经常需要用到统计一下字符串长度,踩了很多坑,分享一下。
使用strlen计算
1.引用<string.h>
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语言中关于计算字符串长度的几种方式


基础教程推荐
- 带你深度走入C语言取整以及4种函数 2022-09-17
- centos 7 vscode cmake 编译c++工程 2023-09-17
- C语言编程C++旋转字符操作串示例详解 2022-11-20
- [c语言-函数]不定量参数 2023-09-08
- C语言实现宾馆管理系统课程设计 2023-03-13
- C语言 详解字符串基础 2023-03-27
- C++实战之二进制数据处理与封装 2023-05-29
- C++实现ETW进行进程变动监控详解 2023-05-15
- [C语言]二叉搜索树 2023-09-07
- 全面了解C语言 static 关键字 2023-03-26