模拟实现
方法一(常规)
#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
例如
#include<stdio.h>
#include<string.h>
int main()
{
if (strlen("abc") - strlen("abcdef"))
{
printf(">\n");
}
else
{
printf("<=\n");
}
return 0;
}
结果
代码运行结果为‘>’;
因此要注意strlen的函数返回值是无符号的数