南通的互联网公司网站专业团队打造专业品质
南通的互联网公司网站,专业团队打造专业品质,建设网站需要多少费用,网站建设承揽合同一、memcpy —— 内存拷贝
void * memcpy ( void * destination, const void * source, size_t num );
memcpy函数用于将源内存区域的内容复制到目标内存区域。功能是将从source指向的内存起始位置连续num个字节的数据#xff0c;原样复制到destination指向的内存区域。
例…一、memcpy —— 内存拷贝
void * memcpy ( void * destination, const void * source, size_t num );
memcpy函数用于将源内存区域的内容复制到目标内存区域。功能是将从source指向的内存起始位置连续num个字节的数据原样复制到destination指向的内存区域。
例如
void* My_memcpy(void * dest, const void * src,size_t sz) {// ...
}int main() {int arr1[20] { 1,2,3,4,5,6,7,8,9,10 };My_memcpy(arr12,arr1,sizeof(arr1)); // 将arr1的前20个字节复制到arr12开始的位置// 复制后arr1内存情况// | 1 | 2 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ... |// 打印数组内容for (int i 0; i 10; i) {printf(%d , arr1[i]);}return 0;
}
在上述自定义实现的My_memcpy函数中根据目标和源地址的大小关系分别采用了不同的复制策略以防止在复制过程中对已复制的部分造成覆盖。
二、memcmp —— 内存比较
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
memcmp函数用于比较两个内存区域的前num个字节内容。功能是对ptr1和ptr2所指内存的前num个字节进行逐个比较返回值为负数、零或正数表示ptr1区域小于、等于或大于ptr2区域。
例如
int main() {int arr1[] { 1,2,3,4,5,6,7,8 };int arr2[] { 1,2,3,4,6,6,7,8 };int a memcmp(arr1, arr2,20); // 比较arr1和arr2前20个字节实际元素个数不足20// 前四个字节相同第五个字节arr1[4]5arr2[4]6因此a0printf(%d , a); // 输出负数return 0;
}
此处注意虽然数组的实际元素个数不足20但memcmp会继续比较数组之后的内存可能未初始化这可能导致不可预期的结果。
三、memset —— 内存设置
void * memset ( void * ptr, int value, size_t num );
memset函数用于将指定内存区域填充为特定的字符。功能是从ptr指向的内存地址开始将接下来num个字节全部填充为整型变量value对应的ASCII字符对于非字符类型填充的是该类型的value。
例如
int main() {int arr[10] { 0 };memset(arr,1,12); // 将arr数组的前12个字节即前三个整数填充为1假设int为4字节// 填充后arr内存情况假设int为4字节// | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |return 0;
}
这里需要注意如果num不是目标类型长度的整数倍那么最后一个对象可能会部分填充。例如上例中由于num12且int为4字节所以最后会有一个整数只填充了前三个字节剩余一个字节保持原值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/89860.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!