往期回顾
【第一章】《认识C语言》
【第二章】C语言概述及基本知识1
【第二章】C语言概述及基本知识2
【第三章】字符串和格式化输入/ 输出
【第三章】 printf
【第三章】 scanf
【第三章】 putchar
【第三章】 getchar
【第三章】 sizeof
计算的是字符串str的长度,从字符的首地址开始遍历,以 ‘\0’ 为结束标志,然后将计算的长度返回,计算的长度并不包含’\0’。
size_t strlen (const char* str);
- 函数的参数为------const char* str:字符指针
- 返回值的类型------size_t:无符号整数(即:unsigned int)
需要注意的点
- strlen函数接受一个指向字符串的指针(const char *str)作为参数,并返回一个
size_t
类型的值,代表字符串的长度。 - strlen通过逐个检查字符,直到遇到NULL字符(‘\0’),来确定字符串的长度。
- strlen仅适用于以NULL字符结尾的C字符串(字符数组),它无法直接计算非以NULL结尾的字符串的长度。
- 如果传递给strlen的指针是空指针(NULL),将导致未定义行为。因此,在使用strlen前应确保指针有效。
计算字符串个数
char* str1 = "hello"; // 5,注意末尾有个隐藏的'\0'
char str2[] = "hello"; // 5
char str2[] = {'h','e','l','l','o','\0'}; // 5
char str2[] = {'h','e','l','l','o','\0','a','b','c'}; // 5,一遇到'\0',函数就会返回
char str2[] = {'h','e','l','l','o'}; // 长度不确定,因为没有'\0',因为数组不会自动补充
以下两行代码
//场景一
#include <stdio.h>
#include <string.h>
int main()
{
char arr[10] = "abcde";
int num = strlen(arr);
printf("数组arr的长度为:%d\n", num);
return 0;
}
//场景二
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = { 'a','b','c','d','e' };
int num = strlen(arr);
printf("数组arr的长度:%d\n", num);
return 0;
}
strlen函数:当计算长度时,只有遇到’\0’才会停止计算,同时计算的长度不包含’\0’。
场景一,arr字符数组中存储的是一个字符串(字符串是以'\0'为结束标志的),那么strlen遍历到字符 'e' 时,再向后遍历,就会遇到'\0',此时strlen停止遍历,返回字符个数:5;
场景二:字符'a'、'b'、 'c' 、'd' 、'e'五个字符依次存储在arr的字符数组中,并没有存储'\0',所以'e'字符后面存储的内容我们并不知道有什么。而strlen函数只有遇到'\0'时才停止,所以返回的个数是一个随机值。
故:我们使用strlen函数时,应该检查字符数组是否以’\0’为结束标志。