strlen(模拟实现和详细介绍)

时间:2023-02-19 22:03:31

模拟实现

方法一(常规)

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

方法二(递归)

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

方法三(指针-指针)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{
assert(str != NULL);
const char* start = str;
while (*str)
{
str++;
}
return str - start;
}
int main()
{
char arr[] = { "abcdef" };
int len = my_strlen(arr);
printf("%d", len);
return 0;
}

详细介绍

strlen是求字符串长度的,求出的长度不可能为负数的,

所以返回类型设置为size_t 也是合情合理

typendef nusigned int size_t

strlen(模拟实现和详细介绍)

例如

#include<stdio.h>
#include<string.h>
int main()
{
if (strlen("abc") - strlen("abcdef"))
{
printf(">\n");
}
else
{
printf("<=\n");
}
return 0;
}

结果

strlen(模拟实现和详细介绍)

代码运行结果为‘>’;

因此要注意strlen的函数返回值是无符号的数