千家信息网

C语言中内存函数有哪些

发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,这篇文章主要介绍了C语言中内存函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。内存函数1.复制 memcpy,memmovev
千家信息网最后更新 2025年02月12日C语言中内存函数有哪些

这篇文章主要介绍了C语言中内存函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

内存函数

1.复制 memcpy,memmove

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

dest复制src中num字节的数据。

模拟实现memcpy

void * my_memcpy ( void * dst, const void * src, size_t count){  void * ret = dst;  while (count--) {    *(char *)dst = *(char *)src;    dst = (char *)dst + 1;    src = (char *)src + 1;  }   return(ret);}

·如果dst 和src指向同一个数组会发生什么?

int main(){ int arr1[10] = { 1,2,3,4,5,6,7,8,9,0 }; // 预期结果       1 2 1 2 3 4 7 8 9 0 my_memcpy(arr1+2, arr1, 16);  for (int i = 0; i < 10; i++)  {   printf("%d ", arr1[i]); }}

实际为 1 2 1 2 1 2 7 8 9 0
因为到5 6 的时候3 4被改成了1 2 ,5 6也就被改成1 2。
也就是说被复制的元素在复制前被改变了,导致复制结果失败。
如果是这样指向同一个数组呢?

int main(){   int arr1[10] = { 1,2,3,4,5,6,7,8,9,0 };   my_memcpy(arr1, arr1+2, 16);    for (int i = 0; i < 10; i++)    {     printf("%d ", arr1[i]);   }}

复制结果没有问题。

对于这种情况,c语言有一个更强大的函数memmove.

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

  • 与memcpy的功能一样,但是memmove可以指向同一块空间。

模拟实现memmove

**void* my_memmove(void* dest, void* src, size_t num){ char* ret = dest; //如果指向同一块空间 判断地址大小,避免数据在被复制前被改变 if ( (char*)dest-(char*)src< 0){  while (num)  {   *((char*)dest)++ = *((char*)src)++;   num--;  } } else {  while(num--){   *((char*)dest+num) = *((char*)src+num);  } } return ret;}

2.比较 memcmp

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

从ptr1和ptr2的位置开始比较num个字节,当两个字节数据不同时就会返回。

  • ptr1>ptr2 返回值>0;

  • ptr1=ptr2 返回值=0;

  • ptr1

感谢你能够认真阅读完这篇文章,希望小编分享的"C语言中内存函数有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

函数 指向 篇文章 内存 语言 字节 数据 结果 同时 数组 空间 强大 两个 也就是 也就是说 价值 位置 元素 兴趣 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 物联网软件开发学生论文 电商php数据库设计 云服务器远程桌面管理软件 net软件开发工具包正式免费版 网络安全公司老板 长沙cdma时间服务器 知网维普期刊数据库怎么找 麒麟合盛网络技术股校招 有服务器的互联网上不了 实验小学网络安全保障工作方案 网络安全与情报大会 丰台区管理软件开发平台 网站怎么更换服务器 北京质量软件开发创新服务 软件开发商员工的年终总结 软件开发哪个培训机构比较好 验证代理服务器 天津网络技术短期培训 北京云纵网络技术有限公司 2018网络安全观后感 香港服务器不用备案弊端 计算机网络技术知识技能 我的世界手机版服务器怎么打字 软件开发使用的技术方法 福州亿同世纪通讯网络技术 网络安全在国家安全中重要性 霸州八洲网络技术 手机软件开发公司人员 一 计算机网络安全的概念 window管理器服务器
0