strlen 计算给定字符串的长度
来自度娘的解释。所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')
我之前的博客区别过strlen和sizeof。今天来说说strlen的三种实现方法。
#include <assert.h> #include <stdio.h> int my_strlen(const char *str) { int count = 0; assert(str != NULL); while(*str != '\0') { count++; str++; } return count; }
- 第一种代码大概是最简单的也最容易想到的代码,就是定义一个count当做计数器,一直到数组str为'\0'为止。当然长度不包括'\0'。
int my_strlen(const char* str)
{
assert(str != NULL);
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
第二种代码是运用函数递归的思想。
int my_strlen(const char *str)
{
const char *start = str;
assert(str != NULL);
while(*str != '\0')
{
str++;
}
return str-start;
}
int my_strlen(const char *str)
{
const char *start = str;
assert(str != NULL);
while(*str++)
{
;
}
return str-start-1;
}
- 第三种代码(上面的两种代码都是一种思想),采用指针的思想,不得不说一个知识点,指针减指针是两个指针之间元素的个数。当然第三种代码也是大多编译器所使用的。
int main()
{
int len = my_strlen("abcdef");
printf("len = %d\n", len);
return 0;
}
- 主函数部分,主要用来调用自己写的my_strlen函数。
- 写的不好,还请大神多多指点。