25 - strlen()函数

1 函数原型

strlen():计算字符串长度,函数原型如下:

size_t strlen ( const char * str );

cstring库描述如下:

Get string length
1. Returns the length of the C string str.
2. The length of a C string is determined by the terminating null-character: A C string is as long as the number of characters between the beginning of the string and the terminating null character (without including the terminating null character itself).
  1. strlen()函数:
    (1)计算字符串str的长度;
    (2)字符串长度等于字符串开头和字符串末尾的空字符’\0’之间的字符数(不包括空字符’\0’);
  2. 字符串str:
    (1)字符串:存储在字符数组中的字符序列,以空字符’\0’作为结束标志;空字符’\0’是个隐藏字符,在字符串中并不显示;
    (2)空字符串:第一个字符就是空字符’\0’的字符串是空字符串,其长度为0;
    (3)未终止的字符串:如果str指向的字符串没有被正确终止(即不包含空字符’\0’),则strlen()函数会继续读取内存直到遇到空字符’\0’为止,这可能会导致未定义行为,包括读取未授权的内存区域。

2 参数

strlen()函数只有一个参数str:

  1. 参数str是指向要计算长度的字符串的指针,类型为char*型。

cstring库描述如下:

str
1. C string.

3 返回值

strlen()函数的返回值类型为size_t型:

  1. 返回值为字符串str的长度。

cstring描述如下:

1. The length of string.

4 示例

4.1 示例1

注意字符串长度和字符数组大小的区别,示例代码如下所示:

int main()
{
   //
   char mystr[100] = "Hello world.";
   //
   printf("字符串长度:%zu\n", strlen(mystr));
   //
   printf("字符数组大小:%d\n", sizeof(mystr));
   //
   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

4.2 示例2

演示空字符串,示例代码如下所示:

int main()
{
   //
   char mystr[100] = { 0 };
   //
   while (1) {
      //
      printf("请输入字符串(仅按Enter键退出):\n");
      //
      gets(mystr);
      //
      if (strlen(mystr)) {
         printf("字符串:\"%s\"长度为%zu\n", mystr, strlen(mystr));
         printf("\n");
      }
      else
      {
         printf("字符串为空\n");
         break;
      }
   }
   //
   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

代码及运行结果分析如下:

  1. 当仅按下回车键Enter时,mystr字符串是个空字符串,即只包含空字符’\0’,字符串长度为0,while循环结束退出。

4.3 示例3

演示未终止的字符串,示例代码如下所示:

int main()
{
   //
   char mystr[12] = { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '.' };
   //
   printf("字符串长度:%zu\n", strlen(mystr));
   //
   printf("字符数组大小:%d\n", sizeof(mystr));
   //
   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

代码及运行结果分析如下:

  1. 字符数组mystr并不能算是一个字符串,因为末尾并没有空字符’\0’作为结束标志;在使用strlen()函数计算“字符串”mystr的长度时,strlen()函数会越过字符数组mystr的最后一个字符’.‘,继续读取内存,直至遇到空字符’\0’为止。

4.4 示例4

编写自己的字符串长度计算函数,示例代码如下所示:

size_t my_strlen(const char* str) {
   //
   assert(str != NULL);
   //
   const char* s = str;
   //
   while (*s) {
      s++;
   }
   //
   return (s - str);
}

int main()
{
   //
   char* mystr = "Hello world.";
   //
   printf("字符串长度:%zu\n", my_strlen(mystr));
   //
   return 0;
}

代码运行结果如下图所示:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值