C 标准库 - string.h之memmove使用
memmove
- Move block of memory
- Copies the values of num bytes from the location pointed by source to the memory block pointed by destination. Copying takes place as if an intermediate buffer were used, allowing the destination and source to overlap.
- The underlying type of the objects pointed by both the source and destination pointers are irrelevant for this function; The result is a binary copy of the data.
- The function does not check for any terminating null character in source - it always copies exactly num bytes.
- To avoid overflows, the size of the arrays pointed by both the destination and source parameters, shall be at least num bytes.
- 从 source 所指向的对象复制 num 个字节到 destination 所指向的对象。两个对象都被转译成 unsigned char 的数组。对象可以重叠:如同复制字符到临时数组,再从该数组到 destination 一般发生复制。
- 从 source 复制 num 个字符到 destination,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
- 若出现 destination 数组末尾后的访问则行为未定义。
- 若 destination 或 source 为空指针则行为未定义。
void * memmove ( void * destination, const void * source, size_t num );
Parameters
destination
- Pointer to the destination array where the content is to be copied, type-casted to a pointer of type void*.
- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
- 指向复制目的对象的指针
source
- Pointer to the source of data to be copied, type-casted to a pointer of type const void*.
- 指向要复制的数据源,类型强制转换为 void* 指针。
- 指向复制来源对象的指针
num
- Number of bytes to copy.size_t is an unsigned integral type.
- 要被复制的字节数。
- 要复制的字节数
Return Value
- destination is returned.
- 该函数返回一个指向目标存储区 destination 的指针。
- 返回 destination 的副本,本质为更底层操作的临时内存地址,在实际操作中不建议直接使用此地址,操作完成以后,真正有意义的地址是destination本身。
Example
//
// Created by zhangrongxiang on 2018/2/10.
//
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[32] = "I am your GOD";
char str2[32] = "Hello World";
char str3[] = "void * memmove ( void * destination, const void * source, size_t num );";
memmove(str2, str, strlen(str));
printf("%s\n", str2);//I am your GOD
memmove(str2, "hi\0hi", sizeof(str2));
printf("%s\n", str2);//hi
printf("%c%c%c%c\n", str2[3], str2[4], str2[5], str2[6]);//hi\0\0
memmove(str, str3, sizeof(str) - 1);
for (int i = 0; i < sizeof(str); ++i) {
printf("%c", str[i]);
}//void * memmove ( void * destina%
/////////////////////////////////////////////////////////////////////
char str4[] = "1234567890";
puts(str4);//1234567890
memmove(str4 + 4, str4 + 3, 3); // 从 [4,5,6] 复制到 [5,6,7]
puts(str4);//1234456890
////////////////////////////////////////////////////////////////////
// 设置分配的内存的有效类型为 int
int *p = malloc(3 * sizeof(int)); // 分配的内存无有效类型
int arr[3] = {1, 2, 3};
memmove(p, arr, 3 * sizeof(int)); // 分配的内存现在拥有有效类型
printf("%d%d%d\n", p[0], p[1], p[2]);//123
printf("%d%d%d\n", *p, *(p + 1), *(p + 2));//123
return 0;
}
文章参考
- http://zh.cppreference.com/w/c/string/byte/memmove
- http://www.cplusplus.com/reference/cstring/memmove/
- http://www.runoob.com/cprogramming/c-function-memmove.html
转载注明出处
C 标准库 - string.h之memmove使用的更多相关文章
- C 标准库 - string.h
C 标准库 - string.h This header file defines several functions to manipulate C strings and arrays. stri ...
- C标准库<string.h>实现
本文地址:http://www.cnblogs.com/archimedes/p/c-library-string.html,转载请注明源地址. 1.背景知识 <string.h>中声明的 ...
- C 标准库 - string.h之memcpy使用
memcpy Copy block of memory Copies the values of num bytes from the location pointed to by source di ...
- C标准库string.h中几个常用函数的使用详解
strlen 计算字符串长度 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符. 函数实现: int Strlen(cons ...
- C 标准库 - string.h之memcmp使用
memcmp Compare two blocks of memory. Compares the first num bytes of the block of memory pointed by ...
- C 标准库 - string.h之memchr使用
memchr Locate character in block of memory,Searches within the first num bytes of the block of memor ...
- C 标准库 - string.h之strlen使用
strlen Returns the length of the C string str. The length of a C string is determined by the termina ...
- C 标准库 - string.h之strpbrk使用
strpbrk Locate characters in string,Returns a pointer to the first occurrence in str1 of any of the ...
- C 标准库 - string.h之strrchr使用
strrchr Locate last occurrence of character in string, Returns a pointer to the last occurrence of c ...
随机推荐
- Android-隐式意图激活操作系统通话界面
阅读Android操作系统的 packages/apps/phone/AndroidManifest.xml,是如何暴露的 AndroidManifest.xml Android操作系统在这里明确 ...
- [c# 20问] 1. 何时使用class与struct
POINTS struct为可以包含数据和函数的值类型 struct为值类型所以不需要堆(heap)而是在栈(stack)上分配空间 struct将数据直接存在struct中,而class只存引用类型 ...
- SQLServer 语句相关
--查询两行张表不同的数据 --相同数据 select tel_no from a intersect select tel_no from b --不同数据 select tel_no from ...
- .net程序员书单
C# 基础 <CLR via C#> <c# 高级编程> 框架学习 <WPF编程宝典 > (英文名:<Pro WPF 4.5 in C#. Windows P ...
- [uwp]数据绑定再学习
在开始上代码前,先来假设这样一种情形: 出于某些原因,创建一个自定义控件(UserControl),然后为它定义一个依赖属性,这个属性有两个作用,一是调用控件方通过数据绑定技术为它赋值,二是控件内部的 ...
- win7 virtio 驱动下载
下载地址: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
- IDEA去除 xml 中Sql语句的背景
去掉黄色背景 去掉绿色背景
- httpclient org.apache.http.NoHttpResponseException: host:端口 failed to respond 错误原因和解决方法
原因:httpclient 之前与服务端建立的链接已经失效(例如:tomcat 默认的keep-alive timeout :20s),再次从连接池拿该失效链接进行请求时,就会保存. 解决方法:官方链 ...
- java.lang.IncompatibleClassChangeError:可以考虑是否是jar包冲突
一.背景:启动tomcat的时候,报错: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.cla ...
- 【文文殿下】后缀自动机(Suffix Automaton,SAM)学习笔记
前言 后缀自动机是一个强大的数据结构,能够解决很多字符串相关的(String-related)问题. 例如:他可以查询一个字符串在另一个字符串中出现的所有子串,以及查询一个字符串中本质不同的字符串的个 ...