C语言进阶之旅 拓展(strlen)

Posted 一个正直的男孩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言进阶之旅 拓展(strlen)相关的知识,希望对你有一定的参考价值。

strlen

  • C语言自带库函数
  • 作用求字符串长度
  • \\0之前的字符个数


    英文strlen用出处和详细解释
    在这里插入图片描述

翻译用处:
在这里插入图片描述

方法1

  • 计数器法
int  MyStrlen(char *str)
{
	int count = 0;
	while (*str++!='\\0')
	{
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "hello";
	printf("%d", MyStrlen(arr));
	return 0;
}

方法2

  • 递归求解
int MyStrlen(char* str)
{
	if (*str != '\\0')
	{
		return 1 + MyStrlen(str + 1);
	}
	else
	{
		return 0;
	}
}
int main()
{
	char arr[] = "hello";
	printf("%d", MyStrlen(arr));
	return 0;
}

方法3

  • 指针-指针
  • str++,然后需要\\0停止,那么他的地址就是\\0
  • 然后减去str1,得到元素个数
  • 俩指针必须指向同一块地址才可以
int MyStrlen(char* str)
{
	char* str1 = str;//把原来的地址给strl
	while (*str!='\\0')
	{
		str++;
	}
	return str - str1;//指针-指针得元素个数

}
int main()
{
	char arr[] = "hello";
	printf("%d", MyStrlen(arr));
	return 0;
}

看地址
在这里插入图片描述

首元素地址是(16进制最后一位)4,str=9,那么一减就得出了元素个数

优化

在这里插入图片描述

  • 这里写的const char*str 代表这个指针指向的变量不能改变
  • size_t是无符号整数,应为长度不可能是负数严谨
  • 假设那传过来是一个空指针assert
#include<assert.h>
size_t  MyStrlen(count char* str)
{
    assert(str!=NULL)
	char* str1 = str;//把原来的地址给strl
	while (*str!='\\0')
	{
		str++;
	}
	return str - str1;//指针-指针得元素个数

}
int main()
{
	char arr[] = "hello";
	printf("%d", MyStrlen(arr));
	return 0;
}

在这里插入图片描述

拓展

const,修改变量,函数数组指针
被const修改后不能修改
这个值不可修改,可能自己犯混改了

assert()断言,
你大致知道那里错了又不确定,就可以进行一个判断,如果是假那么他就会在终端告诉你错误在哪里

以上是关于C语言进阶之旅 拓展(strlen)的主要内容,如果未能解决你的问题,请参考以下文章

我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段

我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段

C语言进阶之旅(12)搞定字符串和内存函数

C语言进阶之旅(留下的足迹)

C语言进阶之旅(留下的足迹)

C语言进阶之旅(留下的足迹)