跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > C语言--内存函数

C语言--内存函数

时间:2024-04-29 09:35:24 来源:网络cs 作者:峨乐 栏目:卖家故事 阅读:

标签: 函数  语言 
阅读本书更多章节>>>>

1.memcmp使用和模拟实现

void * memcpy ( void * destination, const void * source, size_t num );
函数memcpy从 source 的位置开始向后 复制num个 字节的数据到 destination 指向的内存位置。 这个函数在遇到 '\0' 的时候并 不会停下来 。 如果source和destination有任何的重叠,复制的结果都是 未定义 的。
#include <stdio.h>#include <string.h>int main(){ int arr1[] = { 1,2,3,4,5,6,7,8,9,10 }; int arr2[10] = { 0 }; memcpy(arr2, arr1, 20); int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr2[i]); } return 0;}
而对于重叠的内存,交给 memmove函数 来处理。 memcpy函数的模拟实现:
void * memcpy ( void * dst, const void * src, size_t count){ void * ret = dst; assert(dst); assert(src); /* * copy from lower addresses to higher addresses */ while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return(ret);}

2. memmove 使⽤和模拟实现

void * memmove ( void * destination, const void * source, size_t num );
和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是 可以重叠 的。 如果 源空间和⽬标空间 出现重叠,就得使⽤memmove函数处理。
#include <stdio.h>#include <string.h>int main(){ int arr1[] = { 1,2,3,4,5,6,7,8,9,10 }; memmove(arr1+2, arr1, 20); int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr1[i]); } return 0}
输出的结果:
1 2 1 2 3 4 5 8 9 10

memmove的模拟实现:

void * memmove ( void * dst, const void * src, size_t count){ void * ret = dst; if (dst <= src || (char *)dst >= ((char *)src + count)) { /* * Non-Overlapping Buffers * copy from lower addresses to higher addresses */ while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } } else { /* * Overlapping Buffers * copy from higher addresses to lower addresses */ 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函数的使用

void * memset ( void * ptr, int value, size_t num );
memset 是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。

 

#include <stdio.h>#include <string.h>int main (){ char str[] = "hello world"; memset (str,'x',6); printf(str); return 0;}

输出的结果:

xxxxxxworld

4.memcmp函数的使用

int memcmp ( const void * ptr1, const void * ptr2, size_t num );
⽐较从ptr1和ptr2指针指向的位置开始,向后的 num个字节 er
#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); else printf("'%s' is the same as '%s'.\n", buffer1, buffer2); return 0;}

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-04-29/163392.html,文章来源:网络cs,作者:峨乐,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论