0
点赞
收藏
分享

微信扫一扫

strlen注意点与函数实现(3种)--C语言

40dba2f2a596 2022-04-16 阅读 105
c语言

1.什么是strlen函数

strlen函数是包含在<string.h>函数库里的一种计算字符串长度的函数,如果要知道如何用函数办法实现strlen我们需要知道strlen的实现机理。

  • 字符串以'\0'作为结束标志,而strlen函数返回的是在字符串中'\0'之前出现的字符个数(不包含'\0')。
  • 参数指向的字符串必须要以'\0'结束
  • 注意函数的返回值为size_t,它属于无符号数

2.无符号数的体现

我们现在可以来看一段代码

#include<stdio.h>
#include<string.h>
int main()
{
	char a[] = "1234";
	char b[] = "12";
	if (strlen(b) - strlen(a) > 0)
		printf("<\n");
	else
		printf(">=\n");
	return 0;
}

你觉得会输出什么呢?是'>='吗?

这里我们能看到输出的并不是'>='而是'<',为什么呢?

因为strlen返回的值为无符号数,因此虽然我们主观上认为输出的负数,但其实是一个极大的正数,因而无论怎么样都只会输出<,除非两者相等。

那么我们怎么避免这种情况呢?

1.我们可以直接判断两者大小,也就是将两者放到判断符号两端。2.我们还可以转换strlen返回值为int型。

3.种函数实现strlen

直接上代码

3.1简单粗暴的循环自增

size_t my_strlen(const char *arr)//防止字符串被更改,当然也可以不加const
{
    int count = 0;//定义用来计数的变量
    assert(arr != NULL);//防止空指针,此处使用断言,但是别忘记头文件<assert.h>
    while (*arr != '\0')//循环
    {
        arr++;//指针后移
        count++;//计数器
    }
    return count;
}

3.2递归实现strlen

size_t my_strlen(const char *arr)//const可去
{
    assert(arr != NULL);//断言,需<assert.h>
    if (*arr != '\0')//如果当前不是'\0',则长度+1,然后递归判断下一个位置是否为'\0',直至遇到'\0'结束递归;
    {
        return 1 + my_strlen(arr + 1);
    }
    else
    {
        return 0;
    }
}

3.3指针减指针

size_t my_strlen(const char *arr)
{
    assert(arr != NULL);
    char *start = arr;//保存首地址
    while (*arr != '\0')//循环
    {
        arr++;//指针后移
    }
    return arr - start;//结束地址减去开始地址就是字符个数
}
举报

相关推荐

0 条评论