您现在的位置是:首页 > 诗句大全

C语言内存函数(超详解)

作者:璐璐时间:2024-04-04 12:35:42分类:诗句大全

简介  文章浏览阅读1k次,点赞35次,收藏17次。直接实现。_c语言实现拷贝内存

点击全文阅读


乐观学习,乐观生活,才能不断前进啊!!!

我的主页:optimistic_chen
我的专栏:c语言
点击主页:optimistic_chen和专栏:c语言,
创作不易,大佬们点赞鼓励下吧~

文章目录

1.memcpy函数(内存拷贝)2. memmove函数3.memset函数4.memcmp函数完结

1.memcpy函数(内存拷贝)

在这里插入图片描述

总结:
• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
• 这个函数在遇到 ‘\0’ 的时候并不会停下来。
• 如果source和destination有任何的重叠,复制的结果都是未定义的。

直接实现

#include <stdio.h>#include <string.h>struct {  char name[40];  int age;} person, person_copy;int main (){  char myname[] = "Pierre de Fermat";  /* using memcpy to copy string: */  memcpy ( person.name, myname, strlen(myname)+1 );  person.age = 46;  /* using memcpy to copy structure: */  memcpy ( &person_copy, &person, sizeof(person) );  printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );  return 0;}

在这里插入图片描述

自主实现

//memcpy函数拷贝结束后,会返回起始地址2my_memcpy(void* dest, void* src, size_t num)//num为字节数,char*最合适3{4void *ret = dest;5assert(dest && src);6while (num--)7{8//使用char*指针解引用访问一个字节9*(char*)dest = *(char*)src;10src = (char*)src + 1;11dest = (char*)dest + 1;12 }13return ret;14}15int main()16{17int arr[] = { 1,2,3,4,5,6,7,8,9,10 };18int arr2[20] = { 0 };19//memcpy(arr2, arr, 20);20my_memcpy(arr2, arr, 20);21int i = 0;22for (i = 0; i < 20; i++)23{24printf("%d ", arr2[i]);25}2627return 0;28}

2. memmove函数

在这里插入图片描述

总结:
• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的

• 如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。

直接实现

#include <stdio.h>#include <string.h>int main (){  char str[] = "memmove can be very useful......";  memmove (str+20,str+15,11);  puts (str);  return 0;}

在这里插入图片描述

自主实现

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 {  dst = (char *)dst + count - 1;  src = (char *)src + count - 1;  while (count--)    {    *(char *)dst = *(char *)src;    dst = (char *)dst - 1;    src = (char *)src - 1;  }}return(ret);}

3.memset函数

在这里插入图片描述
总结:
memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容

直接实现

#include <stdio.h>#include <string.h>int main (){  char str[] = "almost every programmer should know memset!";  memset (str,'-',6);  puts (str);  return 0;}

在这里插入图片描述

4.memcmp函数


总结:
• ⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节
在这里插入图片描述

直接实现

#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);elseprintf("'%s' is the same as '%s'.\n", buffer1, buffer2);return 0;}

在这里插入图片描述

完结


本次博客到此结束
祝开心每一天~~~
最后觉得博客有帮助,可以点点关注,支持一下,期待下次博客~~~

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句