字符串函数(二):strlen(求长度),strstr(查找子串),strtok(分割),strerror(打印错误信息)

慈云数据 2024-05-30 技术支持 34 0

字符串函数

  • 一.strlen(求字符串长度)
    • 1.函数使用
    • 2.模拟实现(三种方法
    • 二.strstr(字符串查找子串)
      • 1.函数使用
      • 2.模拟实现
      • 三.strtok(字符串分割)
      • 四.strerror,perror(打印错误信息)

        一.strlen(求字符串长度)

        1.函数使用

        size_t strlen(const char* str);
        
        • strlen函数用于求字符串的长度,参数是字符串的首地址,返回值是无符号的整形,初始化字符串有两种,它们各自存在一些小的细节,如下:
          #include
          #include
          int main()
          {
          	char str1[] = "abcdef";//本质:{ 'a','b','c','d','e','f','\0' };隐藏了\0在末尾
          	char str2[] = { 'a','b','c','d','e','f' };
          	//函数strlen(): 求字符串长度
          	printf("%zu\n", strlen(str1));//6
          	printf("%zu\n", strlen(str2));//由于尾部没有'\0'随机数,所以打印随机数
          	printf("%s\n", str2);//直到找到'\0'为止,停止打印
          	//关键字sizeof():求字节大小返回值同样是size_t(unsigned int)
          	printf("%zu\n", sizeof(str1));//7
          	printf("%zu\n", sizeof(str2));//6
          	return 0;
          }
          

          在这里插入图片描述

          • 可以看到str2的长度居然是33,其实这是因为strlen函数会从首地址指向的字符一直向后查找,直到遇到’\0’,才会停下(不包含 ‘\0’ ),统计’\0’之前出现的字符的个数,而str2末尾没有’\0’,所以会一直向后查找,在某个位置恰好遇到了’\0’,所以打印随机数33。
          • printf函数打印字符串也是同样的道理,看似传入"abcdef",其实真正传入的是首地址(a的地址),遇到了’\0’,停止打印。那为什么会出现烫烫烫呢?这就牵扯到了函数栈帧了,日后会将函数栈帧更新上来。

            总结:

            • 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前⾯出现的字符个数(不包

              含 ‘\0’ )。

            • 参数指向的字符串必须要以 ‘\0’ 结束。

            • 注意函数的返回值为size_t,是无符号整形(size_t 等价于 unsigned int)。

              易错点:

              #include
              int main()
              {
              	if (strlen("abc") - strlen("abcdef"))
              		printf(">\n");
              	else
              		printf("
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon