从零开始学C语言系列之第三章《strlen》

往期回顾

【第一章】《认识C语言》
【第二章】C语言概述及基本知识1
【第二章】C语言概述及基本知识2
【第三章】字符串和格式化输入/ 输出
【第三章】 printf
【第三章】 scanf
【第三章】 putchar
【第三章】 getchar
【第三章】 sizeof


计算的是字符串str的长度,从字符的首地址开始遍历,以 ‘\0’ 为结束标志,然后将计算的长度返回,计算的长度并不包含’\0’。

size_t  strlen (const char* str);
  1. 函数的参数为------const char* str:字符指针
  2. 返回值的类型------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’为结束标志。

相关推荐

  1. 开始C语言系列strlen

    2024-04-30 10:12:05       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-30 10:12:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-30 10:12:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-30 10:12:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-30 10:12:05       18 阅读

热门阅读

  1. boost::asio::ip::tcp::resolver async_resolve异步解析

    2024-04-30 10:12:05       11 阅读
  2. OC 常用第三方框架使用记录二

    2024-04-30 10:12:05       14 阅读
  3. 黑马点评面试问题

    2024-04-30 10:12:05       9 阅读
  4. WinForms 应用程序中使用 SignalR 连接到服务器

    2024-04-30 10:12:05       12 阅读
  5. 数据的定义及其分类

    2024-04-30 10:12:05       10 阅读
  6. Python读MCU串口

    2024-04-30 10:12:05       12 阅读
  7. 如何理解 HTTP 状态码?

    2024-04-30 10:12:05       12 阅读
  8. 能源系统-有功无功科普

    2024-04-30 10:12:05       11 阅读
  9. 数据结构-图

    2024-04-30 10:12:05       9 阅读