C语言内存操作函数,memcpy的使用和模拟实现,memmove的使用和模拟实现,memcmp的使用,memset的使用。

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

1.memcpy

函数原型:

void *memcpy( void *dest, const void *src, size_t count );
  • void *dest 目标数据首元素地址
  • const void *src 源数据(需要拷贝过去的数据)
  • size_t count 需要拷贝数据的字节大小
  • void *memcpy 拷贝结束后,返回目标数据的起始地址

函数作用: 拷贝 count 个字节的数据从源数据起始地址到目标空间。

函数的使用

#include <stdio.h>
#include <string.h>

int main() {

	int nums1[10] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10 };
	int nums2[10] = { 0 };
	memcpy(nums2 , nums1 , 20);
	int i = 0;
	for (i = 0; i < 10; i++) {
		printf("%d " , nums2[i]);
	}

	return 0;
}

C语言内存操作函数,memcpy的使用和模拟实现,memmove的使用和模拟实现,memcmp的使用,memset的使用。

函数的模拟实现:

#include <assert.h>

void* _memcpy(
	void * dest, 
	const void * src, 
	size_t count
) {
	assert(dest != NULL && src != NULL);

	void* temp = dest;

	while (count) {
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;

		count--;
	}

	return temp;
}

注:
1.memcpystrcpy 的区别是 memcpy 可以拷贝任意类型的数据,但是 strcpy只可以对字符串使用。
2.memcpy 不可以拷贝同一块内存空间的数据。


2.memmove

函数原型:

void *memmove( void *dest, const void *src, size_t count );
  • void *dest 目标数据首元素地址
  • const void *src 源数据(需要拷贝过去的数据)
  • size_t count 需要拷贝数据的字节大小
  • void *memmove 拷贝结束后,返回目标数据的起始地址

函数作用: 拷贝 count 个字节的数据从源数据起始地址到目标空间。与 memcpy不同的是,memmove可以拷贝同一块内存空间的数据。

函数的使用

#include <stdio.h>
#include <string.h>

int main() {

	int nums1[10] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10 };
	memmove(nums1 + 2, nums1, 20); // 1 2 1 2 3 4 5 8 9 10
	int i = 0;
	for (i = 0; i < 10; i++) {
		printf("%d ", nums1[i]);
	}

	return 0;
}

C语言内存操作函数,memcpy的使用和模拟实现,memmove的使用和模拟实现,memcmp的使用,memset的使用。

函数的模拟实现:

#include <assert.h>

void* _memmove(
	void* dest,
	const void* src,
	size_t count
) {
	assert(dest != NULL && src != NULL);

	void* temp = dest;

	if (src < dest) {
		// 从后向前拷贝
		while (count) {
			*((char*)dest + count - 1) = *((char*)src + count - 1);

			count--;
		}
	}
	else {
		// 从前向后拷贝
		while (count) {
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;

			count--;
		}
	}

	return temp;
}

memmove 在实现的过程中,要分两种情况。

  1. src 小于 dest 时,我们需要从后向前拷贝数据,防止数据的覆盖。
  2. src 大于 dest 时,我们需要从前向后拷贝数据,防止数据的覆盖。

3.memcmp

函数原型:

int memcmp( const void *buf1, const void *buf2, size_t count );
  • const void *buf1 数据1首元素地址
  • const void *buf2 数据2首元素地址
  • size_t count 需比较数据的多少个字节
  • int memcmp 返回一个整型
    • > 0 说明第一个数据大于第二个数据
    • < 0 说明第一个数据小于第二个数据
    • = 0 说明两个数据相等

函数作用: 比较 count 个字节两个数据域中的数据是否相等。

函数的使用

#include <stdio.h>
#include <string.h>

int main() {
	int nums1[10] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10 };
	int nums2[10] = { 1 , 2 , 3 , 4 , 5 };
	printf("%d" , memcmp(nums1 , nums2 , 20)); // 0

	return 0;
}

C语言内存操作函数,memcpy的使用和模拟实现,memmove的使用和模拟实现,memcmp的使用,memset的使用。


4.memset

函数原型:

void *memset( void *dest, int c, size_t count );
  • void *dest 被填充数据的首元素地址
  • int c 填充的数据
  • size_t count 填充的多少字节的数据
  • void *memset 返回填充后数据的首元素地址

函数作用: 内存空间填充数据。

函数的使用

#include <stdio.h>
#include <string.h>

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

	return 0;
}

C语言内存操作函数,memcpy的使用和模拟实现,memmove的使用和模拟实现,memcmp的使用,memset的使用。
注: memset会把数据的每一个字节都填充成你要填充的那个元素。文章来源地址https://www.toymoban.com/news/detail-489992.html

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

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

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

相关文章

  • C语言内存函数(memcpy、memmove、memcmp)详解

    memcpy函数为内存拷贝函数,既可以拷贝字符串,也可以拷贝整形数组、浮点型数组等,具有明显的应用优势, destination为目的地空间,source为不可修改(const)的来源空间,num表示无符号的字节数。其主要含义为将source内容拷贝到destination中,拷贝num个字节数。其返回类型、目

    2024年02月07日
    浏览(32)
  • C语言—模拟实现memcpy,memmove

    函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 \\\'\\0\\\' 的时候并不会停下来。 如果source和destination有任何的重叠,复制的结果都是未定义的。 其实要实现memcpy非常的简单,我们不管传进来的是哪种数据类型都统一强转为char*,我们知

    2024年02月15日
    浏览(35)
  • 来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp

    今天又来写一篇C的文章,这里要讲的是C语言中的几个内存函数,主要是讲解功能和用法,望能耐心观看哦。望官方也多多曝光。 目录 memcpy  memmove memset  memcmp  memcpy  是 C 语言标准库中的一个函数,用于复制内存块的内容。它的主要作用是将一个源内存区域的内容复制到

    2024年02月22日
    浏览(40)
  • 提升内功之模拟实现库函数strlen/strncpy/strcmp/strcat/strstr/memcpy/memmove

    strlen函数的作用就是求字符串的首元素开始往后计算字符串的长度,直到’\\0‘,但不会把\\0的长度计算进去 strncpy的作用就是从source指向的字符串复制num个字节的内容到destination指向的字符串去 如果source的长度小于num,则填充0 注意source和destination的内容在空间上不要重叠,如

    2024年02月16日
    浏览(43)
  • 【C语言】memcpy,memmove,memcmp,memset函数详解

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 #includestring.h 与strn

    2024年02月17日
    浏览(33)
  • memcpy、memmove、memcmp、memset函数的作用与区别

    作用: 从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意: memcpy() 函数在遇到 ’\\0’ 的时候 不会停下来 (strcpy字符串拷贝函数在遇到’\\0’的时候会停下来); destination和source 所指向的内容不能重叠, 否则得不到想要的结果。 void* memcpy(void* destination

    2024年02月14日
    浏览(33)
  • 【C语言】memmove()函数(拷贝重叠内存块函数详解)

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录  一.memmove()函数简介 1.函数功能 2.函数参数 1.void * destination 2.onst void * source 3.size_t num 3.函数返回值 4.函数头文件 二.memmove()函数的具体使用 1.使用memmove()函数完成拷贝整型数组数据(目的地与源重

    2024年02月06日
    浏览(38)
  • 【C语言】——内存函数的使用及模拟实现

      在【C语言】——字符串函数的使用与模拟实现(上)与【C语言】——字符串函数的使用与模拟实现(下)二文中,我曾详细介绍了字符串相关函数的具体功能及其模拟实现。      然而,实践过程中,我们往往不仅仅只是处理字符串类型的变量,若要对浮点型、整型

    2024年04月28日
    浏览(32)
  • C语言——内存函数的使用与模拟实现

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

    2024年02月02日
    浏览(35)
  • 【C语言】memcpy()函数(内存块拷贝函数)

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录 一.memcpy()函数简介 🎏函数功能 🎏函数参数 📌void * destination 📌const void * source 📌size_t num 🎏函数返回值 🎏函数头文件 二.memcpy()函数的具体使用 🎏使用memcpy()函数完成拷贝整型数组数据 🎏使

    2024年02月05日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包