字符串和内存函数(下)

简介: 字符串和内存函数(下)

一、 memcpy

1. 定义

我们昨天介绍了字符串函数的拷贝 以及带有限制的字符串函数的拷贝

这个函数其实和我们带有限制的字符串函数的拷贝差不多

只不过这里传递进来的参数是void类型的 这样就能够接受所有类型的指针进来了

我们可以来尝试下这段代码

我们可以发现的是 这一段代码是可以完美运行的

2. 模拟实现

代码表示如下

void* my_memcpy(void* dest, const void* src, size_t num)
{
  assert(dest && src);
  void* ret = dest;
  while (num--)
  {
    *(char*)dest = *(char*)src;
    dest = (char*)dest + 1;
    src = (char*)src + 1;
  }
  return ret;
}
 
void test1()
{
  int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
  int arr2[10] = { 0 };
  //内存拷贝 memcpy
  //int*  int*
  my_memcpy(arr2, arr1 + 2, 17);
}

实现结果如下

我们发现 这样子是可以完美运行的

二、 memmove

1. 定义

其实memmove就是memcpy的升级版

我们可以发现 当我们想要移动数组本身的时候 其实memcpy并不能很好的执行

2. 实现

这是为什么呢 ?

我们画图来解释下

那么 代码表示如下

void* my_memmove(void* dest, const void* src, size_t num)
{
  assert(dest && src);
  void* ret = dest;
  if (dest < src)//前->后
  {
    while (num--)
    {
      *(char*)dest = *(char*)src;
      dest = (char*)dest + 1;
      src = (char*)src + 1;
    }
     }else
    while (num--)//后->前
    {
      *((char*)dest + num) = *((char*)src + num);
  }
}

我们可以发现 是可以完美运行的

三. memcmp

1. 定义

我们可以发现的是 这个和我们以前写的strncpy也差不了多少

我们来使用这个函数看看

我们可以发现 如果arr1大于arr2就返回1

如果arr1小于arr2就返回-1

如果arr1==arr2就返回0

2. 模拟实现

那么 我们来尝试模拟实现以下这个函数

代码表示如下

实现结果如下

四. memset

1.定义

memset可以将一个数组的前x个元素额设置成一个值

2. 实现

代码表示如下

int main()
{
  char arr[] = "hello world";
  memset(arr, 'x', 5);
  printf("%s\n", arr);
  memset(arr + 6, 'y', 5);
  printf("%s\n", arr);
  return 0;
}

实现效果如下

完美实现

以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言

目录
相关文章
|
2月前
10分钟让你学会内存函数:memcpy,memmove,memset,memcmp的用法及模拟实现。
10分钟让你学会内存函数:memcpy,memmove,memset,memcmp的用法及模拟实现。
33 2
|
2月前
|
C语言
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
35 0
|
5天前
【C初阶】内存函数:memcpy+memmove+memset+memcmp
【C初阶】内存函数:memcpy+memmove+memset+memcmp
|
1月前
|
存储 缓存 C语言
【C语言】字符函数,字符串函数,内存函数
C语言中的字符串函数和内存函数
24 0
【C语言】字符函数,字符串函数,内存函数
|
2月前
|
C语言
【C语言】:4大内存函数
【C语言】:4大内存函数
18 2
|
2月前
字符串和内存函数(2)
字符串和内存函数(2)
29 5
|
2月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
29 0
|
2月前
|
程序员 C语言
C语言内存管理:malloc、calloc、realloc与free函数详解
C语言内存管理:malloc、calloc、realloc与free函数详解
36 0
|
2月前
|
C语言
C语言内存函数
C语言内存函数
20 0
|
2月前
|
C语言 C++
C语言----C语言内存函数
C语言----C语言内存函数