C语言——内存函数的使用与模拟实现

这篇具有很好参考价值的文章主要介绍了C语言——内存函数的使用与模拟实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流
本文由:残念ing 原创CSDN首发,如需要转载请通知
个人主页:残念ing-CSDN博客,欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:残念ing 的C语言系列专栏——CSDN博客


C语言——内存函数的使用与模拟实现,C语言,c语言,开发语言,算法,1024程序员节 

目录

前言:

1. memcpy 函数

1.1 memcpy 的使用

1.2 memcpy 的模拟实现

2. memmove 函数

2.1 memmove 的使用

2.2 memmove 的模拟实现

3. memset 函数的使用

4. memcmp 函数的使用


前言:

在C语言中除了字符函数和字符串函数外,还有关于内存的函数,现在我们就来学习一下内存函数吧!!!

1. memcpy 函数

void * memcpy ( void * destination, const void * source, size_t num );

功能:函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置

注意:

1、 这个函数在遇到'\0'的时候并不会停下来

2、如果source和destination有任何的重叠,复制的结果都是未定义的

1.1 memcpy 的使用

#include<stdio.h>
#include<string.h>
//memcpy的使用--拷贝(有开始地址,拷贝的数)
int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,0 };
	int arr2[20] = { 0 };
	memcpy(arr2, arr1+3, 5 * sizeof(int));
	for (int i = 0; i < 20; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

1.2 memcpy 的模拟实现

//模拟实现
void* my_memcpy(void* dest, const void* src, size_t num)
{
	while (num--)
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return dest;
}
int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,0 };
	int arr2[20] = { 0 };
	void*ret=my_memcpy(arr2, arr1 + 3, 5 * sizeof(int));
	for (int i = 0; i < 20; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

2. memmove 函数

void * memmove ( void * destination, const void * source, size_t num );

功能:从source的位置开始向后复制num个字节的数据到destination指向的内存位置

注意:

1、和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的

2、如果源内存空间和目标空间出现重叠,就得使用memmove函数处理

2.1 memmove 的使用

int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,0 };
	int arr2[20] = { 0 };
	memmove(arr1+2, arr1, 5 * sizeof(int));
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}

2.2 memmove 的模拟实现

void* memmove(void* dst, const void* src, size_t count)
{
	void* ret = dst;//记住起始位置
	if (dst <= src || (char*)dst >= ((char*)src + count)) 
    {
        //从前往后拷
		while (count--) 
        {
			*(char*)dst = *(char*)src;
			dst = (char*)dst + 1;
			src = (char*)src + 1;
		}
	}
	else 
    {
        //从后往前拷
		while (count--) 
        {
			*((char*)dst+count) = *((char*)src+count);
		}
	}
	return ret;
}

3. memset 函数的使用

void * memset ( void * ptr, int value, size_t num );

功能:memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容

#include <stdio.h>
#include <string.h>
int main()
{
	char str[] = "hello world";
	memset(str, 'x', 6);
	printf(str);
	return 0;
}

4. memcmp 函数的使用

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

功能:比较从ptr1和ptr2指针指向的位置开始,向后的num个字节

返回规则:

C语言——内存函数的使用与模拟实现,C语言,c语言,开发语言,算法,1024程序员节文章来源地址https://www.toymoban.com/news/detail-786195.html

#include <stdio.h>
#include <string.h>
int main()
{
	char buffer1[] = "DWgaOtP12df0";
	char buffer2[] = "DWGAOTP12DF0";
	int n;
	n = memcmp(buffer1, buffer2, sizeof(buffer1));
	if (n > 0)
		printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
	else if (n < 0)
		printf("'%s' is less than '%s'.\n", buffer1, buffer2);
	else
		printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
	return 0;
}

到了这里,关于C语言——内存函数的使用与模拟实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】内存函数memcpy和memmove的功能与模拟实现

    1.memcpy 功能:把source指向的前num个字节内容拷贝到destination指向的位置去,可以拷贝任意类型的数据。 注:1.memcpy并不关心\\0,毕竟传的也不一定是字符串,因此拷贝过程中遇到\\0也不会停下来。 2.num的单位是字节,并不是要拷贝的元素个数 3.如果source和destination有任何的重叠

    2024年02月19日
    浏览(40)
  • C语言从入门到实战——常用内存函数的了解和模拟实现

    内存函数(memory functions)指的是控制计算机内存操作的函数 函数 memcpy 从 source 的位置开始向后复制 num 个字节的数据到 destination 指向的内存位置。 这个函数在遇到 \\\'\\0\\\' 的时候并不会停下来。 如果 source 和 destination 有任何的重叠,复制的结果都是未定义的。 对于重叠的内存

    2024年02月03日
    浏览(35)
  • 【C语言】memcpy memmove memset memcmp 四大内存操作函数(详解+用法+模拟实现)

    头文件string.h中常用内存操作函数共有四大,学习完本篇文章,各种类型数组的常见处理轻松拿下。 对字符串(字符数组)的操作函数有很多,但是我们想要操作整型数组等呢: 这就需要内存操作函数了, memory在计算机科学中是内存的意思 ,这也是四大内存操作函数都有mem头

    2024年02月10日
    浏览(47)
  • 【c语言:常用字符串函数与内存函数的使用与实现】

    简介:本篇文章是对C语言中常用的字符串函数和内存函数的学习以及模拟实现 文档内容来自:https://legacy.cplusplus.com/ 字符串以 ‘\\0’ 作为结束标志, strlen函数返回的是在字符串中 ‘\\0’ 前⾯出现的字符个数( 不包含 \\\'\\0\\\' )。 参数指向的字符串必须要以 ‘\\0’ 结束。 注意函

    2024年02月04日
    浏览(46)
  • C语言库函数之 qsort 讲解、使用及模拟实现

    我们在学习排序的时候,第一个接触到的应该都是冒泡排序,我们先来复习一下冒泡排序的代码,来作为一个铺垫和引入。 代码如下: 很简单的一种排序方法,但我们可以发现一个问题,那就是冒泡排序不够通用,它只能用于整型数组的排序,如果我要排序float类型,或者排

    2024年02月12日
    浏览(40)
  • 【C语言】——字符串函数的使用与模拟实现(上)

      在我们学习 C语言 的过程中,对 库函数 的使用是必不可少的。其中,相信大家最熟悉的就是 s t d i o . h stdio.h s t d i o . h 中的 p r i n t print p r in t 和 s c a n f scanf sc an f 函数了吧。   但是今天,我们不讲他们(太难了,呜呜呜),今天我们来讲与字符串相关的函数,也就

    2024年04月26日
    浏览(41)
  • C语言:字符串函数的使用方法及模拟实现

    方法一:计数器方式 方法二:指针-指针 1.1 strcpy只用于字符串复制,遇到‘\\0’时停止,还会复制字符串的结束符\\\'\\0\\\'; 所以源字符串必须         以’\\0’结束,也会将源字符串的’\\0’拷贝到目标空间。 1.2 目标空间必须可变。 1.3 如果参数dest所指的内存空间不够大,可能

    2024年04月25日
    浏览(44)
  • 编写C语言程序,模拟实现首次/最佳/最坏适应算法的内存块分配和回收,要求每次分配和回收后显示出空闲分区和已分配分区的情况。假设初始状态下,可用的内存空间为640KB。(江西师范大学软件学院 操作系统)

    为了实现动态分区分配,通常将系统中的空闲分区链接成一个链。所谓顺序查找是指依次搜索空闲分区链上的空闲分区,去寻找一个大小能满足要求的分区。 --------计算机操作系统(第四版) 可变分区也称动态分区,在指作业装入内存时,从可用的内存中划出一块连续的区域

    2024年02月08日
    浏览(44)
  • C语言内存函数介绍以及实现

    目录 前言 一:内存拷贝函数 (1)memcpy( )函数 (2)memove( )函数 二:内存比较函数 三:内存设置函数 本文介绍的函数的函数声明都在头文件string.h中。 函数声明:void* memcpy(void* dest,const void* src,size_t num) 作用:把一片内存空间的字节拷贝到另一片内存空间。 函数参数的意义: ①dest指

    2024年02月01日
    浏览(38)
  • c语言模拟实现strstr函数

    strstr()是string.h库里的一个函数,它的效果是传两个字符串地址,在第一个字符串中找第二个字符串。如果存在返回存在第一个字符串中关于第二个字符串的首地址。如果不存在,就返回空指针。 首先需要定义三个指针,s1,s2,p。因为两个字符串不能改变,需要重新定义三个指

    2024年02月07日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包