文章目录
模拟实现函数
strlen实现
- 计算字符串长度的。
#include <stdio.h>
#include <string.h>
#include <assert.h>
//模拟实现strlen()函数
//1. 计时器版本
//2.递归版本
//3.指针 - 指针
int my_strlen(const char* ptr)
{
int count = 0;//计时器
assert(ptr != NULL);//断言
while (*ptr != '\0')
{
count++;
ptr++;
}
return count;
}
int main()
{
char arr[] = "ABCD";
int ret = strlen(arr);
printf("%d\n", ret);
int ret2 = my_strlen(arr);
printf("%d\n", ret2);
if (strlen("abc") - strlen("abcdef") > 0)
{
printf(">");//ok
}
else
{
printf("<=");
}
return 0;
}
注意事项
- strlen()函数实现,函数的定义的类型,是size_t (无符号)。
原因:长度没有负数的,无符号整数可以是strlen()判断的字符串更长,my_strlen()版本没有考虑到。字符到128个后就会报错。
\0是的ASCII码是全0,字符0的ASCII码是48
strcpy()函数
#include <stdio.h>
#include <string.h>
int main()
{
//模拟strcpy()函数的实现
char arr0[] = {
0 };
char arr1[20] = {
0 };
char p[] = "hello";
strcpy(arr1, p);
printf("%s\n", arr1);//ok
char arr2[20] = "#########";
//strcpy()函数会将\0 ,也拷贝进去。看内存窗口
char* parr = "#############";
//strcpy()函数,var1,必须是可以修改的变量。不能是常量字符串。var2随便
char arr4[5] = "ABCD";
strcpy(arr4,"hello");
printf("%s\n", arr4);
return 0;
}
char arr[20] = {
0 };
*arr = "hello";
printf("%s\n", arr);//err 打印的是 ? 。
//一个是常量字符串,是h的地址
用strcpy()-字符串拷贝函数。
strcat()
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* my_strcat(char* dest,const char* src)
{
char* ch = dest;//这一条是有返回值,才添加的。
assert(dest && src);
//1.找到\0
while