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;
}

文章参考

转载注明出处

C 标准库 - string.h之memmove使用的更多相关文章

  1. C 标准库 - string.h

    C 标准库 - string.h This header file defines several functions to manipulate C strings and arrays. stri ...

  2. C标准库<string.h>实现

    本文地址:http://www.cnblogs.com/archimedes/p/c-library-string.html,转载请注明源地址. 1.背景知识 <string.h>中声明的 ...

  3. C 标准库 - string.h之memcpy使用

    memcpy Copy block of memory Copies the values of num bytes from the location pointed to by source di ...

  4. C标准库string.h中几个常用函数的使用详解

    strlen 计算字符串长度 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符. 函数实现: int Strlen(cons ...

  5. C 标准库 - string.h之memcmp使用

    memcmp Compare two blocks of memory. Compares the first num bytes of the block of memory pointed by ...

  6. C 标准库 - string.h之memchr使用

    memchr Locate character in block of memory,Searches within the first num bytes of the block of memor ...

  7. C 标准库 - string.h之strlen使用

    strlen Returns the length of the C string str. The length of a C string is determined by the termina ...

  8. C 标准库 - string.h之strpbrk使用

    strpbrk Locate characters in string,Returns a pointer to the first occurrence in str1 of any of the ...

  9. C 标准库 - string.h之strrchr使用

    strrchr Locate last occurrence of character in string, Returns a pointer to the last occurrence of c ...

随机推荐

  1. Linux Socket - 基本socket链接

    0x0000 Linux Socket 函数 bind listen connect accept send recv read write 0x0001 Server绑不上ip 报错位置在bind函 ...

  2. Open XML操作Excel导入数据

    项目中发现使用OleDb(using System.Data.OleDb)相关对象处理Excel导入功能,不是很稳定经常出问题,需要把这个问题解决掉.项目组提出使用OpenXML来处理Excel的导入 ...

  3. TSQL--标示列、GUID 、序列

    --1. IDENTIY 列不能为空,不能设默认值,创建后不能使用ALTER TABLE TableName ALTER COLUMN修改,每张表只能有一个自增列--2. 查看当前值:SELECT I ...

  4. 10-08常用的TIME和DATE函数以及各个函数对应的头文件

    系统时间和日期函数:     #include <time.h>     char *asctime(const struct tm *tm);//将tm中存放的信息转换为标准格式    ...

  5. 浅析Object基类提供的Equals方法

    当我们去查看object.cs源代码文件的时候,会发现object基类提供了三种判断相等性的方法.弄清楚每种方法存在的原因,也就是具体解决了什么问题,对我们理解.net判断对象相等性的逻辑很有帮助,下 ...

  6. python中的内置函数,递归,递归文件显示(二),二分法

    1.部分内置函数 repr()显示出字符串的官方表示形式,返回一个对象的string形式 # repr 就是原封不动的输出, 引号和转义字符都不起作用 print(repr('大家好,\n \t我叫周 ...

  7. 配置AndroidStdio的开发环境

    http://blog.csdn.net/siwuxie095/article/details/53431818

  8. 如何成功导入SlidingMenu库?

    SlidingMenu是一个开源的侧滑菜单(https://github.com/jfeinstein10/SlidingMenu).  为大家的安卓程序提供侧滑菜单,这个功能也非常有用. 要想正常使 ...

  9. “全栈2019”Java第一百零五章:匿名内部类覆盖作用域成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. C# 未安装Office环境下使用NPOI导出Excel文件

    1.NuGet直接安装NPOI程序包: 2. using NPOI.XSSF.UserModel; 3.导出Excel代码: private void TsbExport2ExcelClick(obj ...