目录
一、引用头文件
所有的库函数都要引用头文件,字符串类函数也一样,它们的头文件均为<cstring> (string.h)
引用方式如下:
C语言
#include <string.h>
C++
#include <cstring>
二、strlen函数的作用
计算字符串的长度。
三、理解strlen函数的定义
size_t strlen ( const char * str );
其中size_t是函数的返回类型,const char*是函数的形参类型,str是函数定义的形参。
1、返回类型size_t
size_t是一种无符号整型数据类型,它的定义和具体实现与操作系统相关。在32位系统中,size_t通常被定义为unsigned int,4字节大小;而在64位系统中,它被定义为unsigned long,8字节大小。
该函数返回值为字符串的长度,因此使用size_t可以杜绝返回值因错误操作改成负数,同时因其无符号位,可以表示更大的数。但也因此无法直接进行一些附加操作,例如通过字符串长度相减比较两个字符串谁更长。
2、参数部分const char* str
const用于创建常变量即变量具有常属性--不可更改。
该函数使用传址调用方式,传输的是char*的地址,在其前面加上const,可以杜绝因错误操作更改字符串。(该函数只需计算字符串长度,不必更改字符串)这在一定程度上提高了程序的安全性。
四、使用strlen函数
#include <cstring>//include <string.h>
#include <cstdio>//include <stdio.h>
int main()
{
char arr[] = "hello";
size_t ret = strlen(arr);
printf("%zd", ret);//%zd用于打印size_t类型数据//5
return 0;
}
函数的返回类型size_t,因此用size_t的变量接收可以保证数据不会损失。
五、注意要点
1、传参可以传指针、数组名(此时表示数组首元素地址)、字符串(此时传的是首字符地址)。
2、strlen函数计算的字符串必须以'\0'结束。
六、模拟实现(以C语言为例)
方法1:
#include <assert.h>
#include <stdio.h>
int my_strlen(const char arr[])
{
assert(arr != NULL);
int count = 0;
int i = 0;
while (arr[i] != '\0')
{
count++;
i++;
}
return count;
}
int main()
{
char arr[] = "hello";
int count = my_strlen(arr);
printf("%d\n", count);
return 0;
}
此方法与C语言标准定义的库函数有两处不同:
1、返回值我使用了int,在以知无误的情况下提高了利用率。
例如:
#include <assert.h>
#include <stdio.h>
int my_strlen(const char arr[])
{
assert(arr != NULL);
int count = 0;
int i = 0;
while (arr[i] != '\0')
{
count++;
i++;
}
return count;
}
int main()
{
char arr1[] = "hello";
char arr2[] = "hello!";
int count1 = my_strlen(arr1);
int count2 = my_strlen(arr2);
if (count1-count2 > 0)
printf(">");
else
printf("<=");
return 0;
}
用该方法可得<=,而用库函数strlen则只能得到>。
2、形参我使用数组,这与库函数strlen只在实现方式上有所不同,但在使用上没什么区别。
方法2:
#include <assert.h>
#include <stdio.h>
size_t my_strlen(const char* str)
{
assert(str != NULL);
size_t count = 0;
int i = 0;
while (*(str+i) != '\0')
{
count++;
i++;
}
return count;
}
int main()
{
char arr[] = "hello";
size_t count = my_strlen(arr);
printf("%zd\n", count);
return 0;
}
此方法与C语言标准定义的库函数是相同的。
每日一学,今天你又超过了百分之九十九的人。
如果本篇文章对你有帮助,请点个关注和赞吧!
1655

被折叠的 条评论
为什么被折叠?



