模拟实现一些库函数(1)(上)

简介: 模拟实现一些库函数(1)

函数介绍

本章内容会给大家展示

求字符串长度

strlen

长度不受限制的字符串函数

strcpy

strcat

strcmp

长度受限制的字符串函数介绍

strncpy

strncat

strncmp

字符串查找

strstr

并将这些函数全部模拟出来,带给大家。

字符串长度strlen函数

这个函数是用来实现求字符串长度的,话不多说我们上代码。

int main()
{
  char str[] = "ABCDEFGHIJK";
  int sz=strlen(str);
  printf("%d", sz);
  return 0;
}

那么我们来实现模拟strlen函数

#include<assert.h>
int my_strlen(const char* str)
{
  assert(str);
  int i = 0;
  while (*str != '\0')
  {
    str++;
    i++;
  }
  return i;
}
int main()
{
  char str[] = "ABCDEFGHIJK";
  int sz=my_strlen(str);
  printf("%d", sz);
  return 0;
}

我们知道strlen函数是以接收到’\0’为信号来计算的,所以我们传参传过去的是数字名也就是数组首元素地址,在自定义函数中我们只是计算数组长度,并不希望改变原数组,所以我们可以用const来修饰,为了防止穿过来的是空指针,我们用assert函数,不过需要引入一个<assert.h>的头文件。

长度不受限制的函数

strcpy

strcpy函数是字符串拷贝函数,我们直接看效果,上代码,来模拟。

int main()
{
  char str1[] = "************";
  char str2[] = "hello world";
  strcpy(str1, str2);
  printf("%s\n", str1);
  return 0;
}

接下来我们直接来实现

char* my_strcpy(char* str1, const char* str2)
{
  char* ret = str1;
  assert(str1 && str2);
  while ((*str1++ = *str2++))
  {
    ;
  }
  return 0;
}
int main()
{
  char str1[] = "************";
  char str2[] = "hello world";
  my_strcpy(str1, str2);
  printf("%s\n", str1);
  return 0;
}

首先,strcpy需要两个参数一个是拷贝数组,一个是拷贝目标数组,而拷贝目标数组我们不希望他被改变所以用const来修饰,为了防止传参过来的是空指针所以两个参数我们都用assert函数来检验。之后再用while循环来实现字符拷贝,因为strcpy函数返回的是拷贝字符串首地址,所以我们设置ret来接受首地址,最后返回ret即可。

strcat

strcat是拼接函数,我们依然先看效果。

int main()
{
  char str1[20] = "ABCD";
  char str2[] = "EFGH";
  strcat(str1, str2);
  printf("%s", str1);
  return 0;
}

了解了效果之后,我们来实现模拟。

char* my_strcat(char* str1,const char* str2)
{
  char* ret = str1;
  assert(str1 && str2);
  while (*str1 != '\0')
  {
    str1++;
  }
  while ((*str1++ = *str2++))
  {
    ;
  }
  return ret;
}
int main()
{
  char str1[20] = "ABCD";
  char str2[] = "EFGH";
  my_strcat(str1, str2);
  printf("%s", str1);
  return 0;
}

其实,追加函数和拷贝函数的原理很相似,只不过是从拷贝函数的末尾开始拷贝,所以我们设置一个循环,跳过追加目标函数的所有字符从’\0’,开始拷贝,接下来就和strcpy函数一样了。

目录
相关文章
|
6月前
|
C语言
模拟实现C语言中经典库函数,字符相关的函数与内存相关的函数
模拟实现C语言中经典库函数,字符相关的函数与内存相关的函数
模拟实现C语言中经典库函数,字符相关的函数与内存相关的函数
|
6月前
|
C语言
C语言-----qsort函数的功能以及模拟实现
C语言-----qsort函数的功能以及模拟实现
59 1
|
6月前
|
存储 C语言
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))
116 0
|
6月前
|
存储 安全 C语言
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))
124 0
|
6月前
|
C语言
c语言进阶部分详解(经典回调函数qsort()详解及模拟实现)
c语言进阶部分详解(经典回调函数qsort()详解及模拟实现)
72 0
|
C语言
C语言常见库函数的模拟实现
C语言常见库函数的模拟实现
59 0
|
C语言
【进阶C语言】字符串与内存库函数认识与模拟实现(1)
size_t为无符号整形,接受他的返回值的变量类型也应该为size_t 函数参数就是字符指针类型。const为了修饰*str,防止原字符串的数据被修改。 需要包含的头文件为:#include&lt;string.h&gt;
58 0
|
6月前
|
C语言 存储
C语言—部分库函数的模拟实现
C语言—部分库函数的模拟实现
|
6月前
|
算法
库函数讲解及模拟实现库函数
库函数讲解及模拟实现库函数
27 0
|
存储 编译器 C语言
【进阶C语言】字符串与内存库函数认识与模拟实现(2)
size_t为无符号整形,接受他的返回值的变量类型也应该为size_t 函数参数就是字符指针类型。const为了修饰*str,防止原字符串的数据被修改。 需要包含的头文件为:#include&lt;string.h&gt;
77 0
下一篇
无影云桌面