今天练习的是用C语言来简单实现库函数strlen。
首先strlen 函数的作用是求出字符串长度,众所周知,在C语言中,字符串是以字符串数组的形式存储的,并且以’\0’为结束标志。先让我们看看strlen库函数的参数即返回值
size_t strlen( const char string );
查看文档可知,库函数strlen的参数是一个const char类型的指针,返回一个size_t类型的数据。
size_t :无符号长整型数据
首先看第一种方法
size_t my_strlen1(const char* string)
{
//count 来记录字符串的长度
size_t count = 0;
//判断参数为空的话返回一个错误的值
if (string == NULL)
{
return -1;
}
//遍历数组,指针后调并且计数
while (*string != '\0')
{
count++;
string++;
}
return count;
}
如果不使用中间变量计数的方法的话,这就要使用递归的方法了。
size_t my_strlen2(const char* string)
{
assert(string != NULL);
if (*string != '\0')
{
//此处应该时++string 而不是string++,后者穿先执行再+所以string 仍是指向第一个
//最好使用string+1因为前两个都会改变指针指向
return 1 + my_strlen2(string+1);
}
return 0;
}
除此之外,我们还可以使用指针相减的方法求出字符串长度,即定义一个指针指向字符串的末尾,减去字符串的首元素的地址可以求出字符串长度。
size_t my_strlen3(const char* string)
{
assert(string != NULL);
const char* prt = string;
while (*prt != '\0')
{
prt++;
}
return prt - string;
}
再使用一个主函数测试一下
int main()
{
char string[] = "hello world";
printf("%lu\n", my_strlen1(string));
printf("%lu\n", my_strlen2(string));
printf("%lu\n", my_strlen3(string));
system("pause");
return 0;
}