c语言的内存函数
2023-12-15 15:57:55
memcpy函数
1.调用形式void*memcpy(void*p1,void*p2,int n),表示从第二个位置复制n个字节到第一个位置,而指针类型为void的原因是他可以复制整型字符型甚至指针结构体类型的数据
2.在遇到'\0'的时候不会停下来,因为函数执行拷贝靠字节数,且拷贝对象不一定是字符串,遇到'\0'时拷贝'\0'
3.拷贝和被拷贝对象不能重叠,重叠时此函数不处理重叠部分,不执行重叠部分的值的复制(可以取数组内部的项验证一下)
4.模拟实现
#include<stdio.h>
void* mymemcpy(void* p1, const void* p2,int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
*(char*)p1 = *(char*)p2;
p1 = (char*)p1 + 1;
p2 = (char*)p2 + 1;
}
return p1;
}
int main()
{
int arr[5] = { 1,2,3,4,5 };
int arr1[5];
mymemcpy((void*)arr1, (const void*)arr, 20);
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d", arr1[i]);
}
return 0;
}
5.改进实现:在后面空间小于前面空间时采用从最后一项向前拷贝
6.当地址重叠的时候使用memmove函数
memset函数
1.作用:设置内存
2.调用形式:void*memset(void* p1,int num,size_t good),一个字节一个字节地将内存空间改变为num的值,改变good个字节
memcmp函数
1.调用形式:int memcmp(const void*p1,const void*p2,size_t num),用法和strcmp相同,只不过这次比的是内存空间,size_t为字节数
文章来源:https://blog.csdn.net/whcwhc111111/article/details/134896897
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!