C语言实现strlen的三种方法小结

 更新时间:2023年06月19日 10:21:09   作者:Hello_World_213  
本文主要介绍了C语言实现strlen的三种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.strlen介绍

strlen --- 求字符串长度

size_t strlen (const char* str);

找到字符串后的‘\0’为止,不包含‘\0’;

2.如何使用strlen库函数

int len = strlen(“abcdef”);

 输出结果:6

char arr[] = { "a" , "b" , "c" , "d" , "e" , "f" };
int len = strlen(arr);

输出结果:随机值

3.三种方法实现strlen 计数器法:

#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str)
{
	int count = 0;
	assert(str != NULL);
	while (*str != '\0')//while(*str)
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	int len = my_strlen("abcdef");
	printf("%d\n", len);
	return 0;
}

递归法:

#include<stdio.h>
int my_strlen(char *str)
{
	if (*str != '\0')
	{
		return 1 + my_strlen(str + 1);
	}
	return 0;
}
int main()
{
	char arr[] = { "abcdef" };
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

指针-指针法:

#include<stdio.h>
int my_strlen(char* str)
{
	char* start = str;
	char* end = str;
	while (*end!='\0')
	{
		end++;
	}
	return end - start;
}
int main()
{
	char arr[] = "bit";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

4.关于strlen返回值

  • strlen库函数的返回值是size_t,其含义是unsigned int,即为无符号数;
  • 我们自己实现库函数strlen的my_strlen的返回值则是int,即为有符号数.

返回类型为unsigned int 和 int 各有利弊:1.返回int类型 不容易出现错误   2.返回unsigned int类型 说明字符串的长度是没有负数的

 3 - 6 = -3;由于strlen库函数的返回类型是unsigned int,则-3被视为无符号数自然也就比0大;所以容易引发歧义与误解.

到此这篇关于C语言实现strlen的三种方法小结的文章就介绍到这了,更多相关C语言实现strlen内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一篇文章带你入门C语言:数组

    一篇文章带你入门C语言:数组

    这篇文章主要介绍了C语言中数组的一些基本知识小结,其中重点是对于数组的内存分配相关方面的知识整理,需要的朋友可以参考下
    2021-08-08
  • C++使用一棵红黑树同时封装出map和set实例代码

    C++使用一棵红黑树同时封装出map和set实例代码

    红黑树(Red Black Tre)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组,下面这篇文章主要给大家介绍了关于C++使用一棵红黑树同时封装出map和set的相关资料,需要的朋友可以参考下
    2023-04-04
  • 简单聊聊C++中线程的原理与实现

    简单聊聊C++中线程的原理与实现

    C++11 引入了多线程支持,提供了一套基本的线程库,包括线程、互斥量(mutex)、条件变量(condition_variable)等。这些组件可以帮助你在 C++ 程序中实现并发和多线程编程,本文就来和大家简单聊聊吧
    2023-03-03
  • C++内存对象布局小测试

    C++内存对象布局小测试

    这篇文章主要介绍了C++内存对象布局小测试,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • c++几种基本的插入排序(图文)

    c++几种基本的插入排序(图文)

    这篇文章主要介绍了c++几种基本的插入排序(图文),需要的朋友可以参考下
    2014-11-11
  • C++常用函数之XML JSON格式转换问题

    C++常用函数之XML JSON格式转换问题

    XML在Json出现前应用很广泛,灵活性好,应用语言也没有限制,发展了这么长时间后xml标准已经很臃肿。这篇文章主要介绍了C++常用函数之XML JSON格式转换问题,需要的朋友可以参考下
    2020-02-02
  • ubuntu中打开终端的三种解决方法

    ubuntu中打开终端的三种解决方法

    本篇文章是对ubuntu中打开终端的三种方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C/C++实现的MD5哈希校验的示例代码

    C/C++实现的MD5哈希校验的示例代码

    MD5算法是一种广泛使用的 Hash 算法,常用于确保信息传输的完整性与一致性,本文主要介绍了C/C++实现的MD5哈希校验的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 一文搞懂C++中继承的概念与使用

    一文搞懂C++中继承的概念与使用

    我们都知道面向对象语言的三大特点是:**封装,继承,多态。**之前在类和对象部分,我们提到了C++中的封装,那么今天呢,我们来学习一下C++中的继承
    2022-07-07
  • 关于STL的erase()陷阱-迭代器失效问题的总结

    关于STL的erase()陷阱-迭代器失效问题的总结

    下面小编就为大家带来一篇关于STL的erase()陷阱-迭代器失效问题的总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论