初识strlen函数

strlen函数是一个位于C标准库<string.h>的库函数

是用以计算字符串长度的函数,即为计算 ‘\0’前字符的数量

函数的声明与使用

size_t strlen(const char *str)

参数类型是 字符指针,在调用strlen函数时,需将数组的数组名(也就是首元素地址)传给strlen函数,strlen函数会以此地址为起始位置,向后计算字符串长度。

返回值类型是 size_t,其实也就是 unsigned int 类型。

举个例子

int main()
{
	char arr[] = "123456789";
	size_t sz = strlen(arr);
	printf("%u", sz);
	return 0;
}

strlen函数的使用非常简单,但有两个需要注意的地方

1.只有strlen函数找到 \0 时,方会停止计算长度。诺所需求长度的字符数组中无 \0,strlen会自起始坐标往后,一直寻找\0,直到找到\0为止。此时函数的返回值是随机的。

int main()
{
	char arr[] = {'1','2','3','4','5'};
	size_t sz = strlen(arr);
	printf("%u", sz);
	return 0;
}

 2.strlen的返回值是 size_t类型的,即无符号整型。

在比较两字符串长度时,不建议使用相减的形式

比如以下这个情况

int main()
{
	char arr1[] = "123456";
	char arr2[] = "123456789";
	size_t sz1 = strlen(arr1);
	size_t sz2 = strlen(arr2);
	if (sz1 - sz2 > 0)
		printf("arr1 > arr2");
	else
		printf("arr1 < arr2");
	//printf("%u", sz);
	return 0;
}

 size_t相减时,整个表达式会发生算数转化,在内存中存放的-3的补码会被看作是size_t类型数据的补码,因size_t类型的原反补相同,也就是-3的补码将被看做是表达式结果的原码,是一个非常打的数字。

strlen函数的三种模拟

三种模拟,实际上都是以找\0为根本的,借助不同的思想,完成对字符串长度的计算

1.计数器实现 

size_t my_strlen(char* str)
{
	assert(str != NULL);
	int count = 0;
	while (*(str + count++) != '\0');
	return --count;
}

2.递归实现

size_t my_strlen(char* str)
{
	if (*str != '\0')
		return my_strlen(str + 1) + 1;
	else
		return 0;
}

3.指针实现

size_t my_strlen(char* str)
{
	char* ret = str;
	while (*str++);
	return str - ret-1;
}

### C语言入门基础 C语言是一种通用的编程语言,因其功能强大、灵活性强以及高效性被广泛应用于各种领域。它不仅能够用于开发应用程序,还可以编写驱动程序甚至操作系统核心部分[^1]。 #### 数据类型与变量 在C语言中,数据类型分为基本数据类型和派生数据类型两大类。常见的基本数据类型有整型(int)、浮点型(float/double)、字符型(char)等。定义一个变量时需指定其具体的数据类型。例如: ```c int age = 20; float height = 175.5; char initial = 'A'; ``` #### 控制结构 控制结构主要包括条件语句(if/else, switch/case) 和循环(for, while, do-while) 。通过这些结构可以让程序按照特定逻辑顺序运行。 以下是简单的if...else例子: ```c int score = 85; if (score >= 60){ printf("Pass\n"); } else { printf("Fail\n"); } ``` #### 函数 函数是用来完成某一特定任务的一段代码集合,在提高代码重用性和模块化方面起着重要作用。每一个C程序都至少包含一个main()函数作为入口点。 自定义求两数之和的功能演示如下所示: ```c #include <stdio.h> // 定义加法函数 int addNumbers(int a, int b){ return a + b; } int main(){ int num1=5,num2=3,sum; sum=addNumbers(num1,num2); printf("%d+%d=%d",num1,num2,sum); return 0; } ``` #### 数组与指针 数组是一系列相同类型的元素连续存储区域;而指针则保存另一个对象地址值的一种特殊变量形式。两者关系密切,掌握它们对于深入学习C至关重要。 下面展示如何操作字符串(实际上是字符数组)并打印长度的例子: ```c #include<stdio.h> #include<string.h> void stringLength(const char* str){ int length=strlen(str); printf("The length of '%s' is %d.\n",str,length); } int main(){ const char text[]="Hello world!"; stringLength(text); return 0; } ``` #### 输入输出 标准输入输出库提供了丰富的API来处理文件或者终端交互需求。常用的有scanf(),printf(),gets(),puts()等等方法实现不同场景下的信息交换过程。 以上只是对C语言基础知识的一个概括介绍,实际运用当中还需要不断实践探索才能更加熟练精通此技术栈[^2]^。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值