C语言内存函数(超详解)
时间:2024-04-13 10:50:22 来源:网络cs 作者:欧阳逸 栏目:广告工具 阅读:
乐观学习,乐观生活,才能不断前进啊!!!
我的主页: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;}
完结
本次博客到此结束
祝开心每一天~~~
最后觉得博客有帮助,可以点点关注,支持一下,期待下次博客~~~
本文链接:https://www.kjpai.cn/news/2024-04-13/157985.html,文章来源:网络cs,作者:欧阳逸,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
下一篇:返回列表