`
eriol
  • 浏览: 407245 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

memcpy, memccpy和memmove

    博客分类:
  • C++
阅读更多

memcpy

 

声明:void *memcpy(void *dest, const void *src, size_t n)

返回值:返回指向dest的指针。

作用:memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束。

 

 

memccpy

 

声明:void *memccpy(void *dest, const void *src, int c, size_t n);

返回值:返回指向src中值为c的下一个字节指针。返回值为0表示在src所指内存前n个字节中没有值为c的字节。

作用:memccpy()用来拷贝src所指的内存内容前n个字节到dest所指的地址上。与memcpy()不同的是,memccpy()如果在src中遇到某个特定值(int c)立即停止复制。

 

 

memmove

 

声明:void *memmove(void *dest, const void *src, size_t n);

返回值:返回指向dest指针。

作用:memmove()是从一个缓冲区移动到另一个缓冲区中。 

 

 

它们之间的区别

 

memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。

不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理。不过执行效率上会比使用memcpy()略慢些。

 

memccpy()与memcpy的区别在于memccpy()可以在遇到某个特定值时立即停止复制。

 

 

总结

 

对于库函数来说,由于没有办法知道传递给它的内存区域的情况,所以应该使用memmove()函数。通过这个函数,可以保证不会出现任何内存块重叠问题。而对于应用程序来说,因为代码“知道”两个内存块不会重叠,所以可以安全地使用memcpy()函数。

分享到:
评论

相关推荐

    memmove、memcpy和memccpy简介.docx

    memmove、memcpy 和 memccpy 函数简介 memmove、memcpy 和 memccpy 是三个常用的内存拷贝函数,它们都用于从一个缓冲区拷贝数据到另一个缓冲区,但它们之间有一些区别。 memmove 函数 memmove 函数的定义为:`...

    C语言函数memset,memset,memcmp,memmove,memchr,memrchr,memccpy等使用

    本文将详细介绍这些函数的具体用法和注意事项。 #### 二、memset() - 内存填充函数 **函数原型**: ```c void *memset(void *ptr, int value, size_t num); ``` **功能**: `memset()`函数用于将一段内存区域的...

    对比C语言中memccpy()函数和memcpy()函数的用法

    本文将深入探讨两个用于复制内存内容的函数:`memccpy()` 和 `memcpy()`。这两个函数都包含在 `<string.h>` 头文件中,它们的主要作用是将一段内存区域的内容复制到另一段内存区域。 首先,我们来看`memccpy()`函数...

    C语言函数库函数详细介绍手册

    memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi ...

    C 语言库函数使用手册

    memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi ...

    C语言库函数速查 CHM

    memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi ...

    C语言函数速查手册

    memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi ...

    C语言函数速查

    memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi ...

    42_libft

    ft生成文件 生成文件库 Makefile测试功能:libc函数: ft_memset ft_bzero ft_memcpy ft_memccpy ft_memmove ft_memchr ft_memcmp ft_strlen ft_isalpha ft_isdigit ft_isalnum ft_isascii ft_isprint ft_toupper ft...

    Keil C51库函数参考.docx

    Keil C51 库函数提供了 9 个本征库函数,这些函数可以直接将固定的代码插入当前行,而不是用 ACALL 和 LCALL 语句来实现,从而提高函数访问的效率。这些本征库函数包括: * `_crol_` 和 `_cror_`:将 char 型变量...

    libft:libft 42项目

    ft_memcpy ft_memccpy ft_memmove ft_memchr ft_memcmp ft_strlen ft_isalpha ft_isdigit ft_isalnum ft_isascii ft_isprint ft_toupper ft_tolower ft_strchr ft_strrchr ft_strncmp ft_strlcpy ...

    字符串函数详解

    这里有四个函数:`memmove`、`memcpy`、`_memccpy`和`strcpy`系列。`memmove`和`memcpy`都是用来复制内存区域的,但`memmove`可以处理源和目标区域重叠的情况,而`memcpy`则不行。`_memccpy`在复制过程中寻找特定...

    字符串操作

    当源和目标地址重叠时,应使用`memcpy`或`memmove`。 - **`memcpy`**:复制n个字节,从源地址到目标地址,处理重叠地址更安全。 - **`bzero`** 和 **`memset`**:用于填充内存区域,`bzero`已经过时,通常使用`...

    Linux下C函数库

    - **相关函数**: memccpy,memcpy,memmove,strcpy,strncpy - **表头文件**: `#include <string.h>` - **定义函数**: `void bcopy(const void *src, void *dest, int n);` - **函数说明**: - `bcopy()`函数与`...

    详解C语言中的memset()函数

    总结来说,`memset()`、`memcpy()`和`memmove()`都是C语言中处理内存操作的重要工具,各自适用于不同的场景。在内存初始化、数据复制以及需要避免重叠区域影响的情况下,正确选择这些函数是保证程序正确性的关键。...

    05内存及字符串操作篇.pdf

    虽然它们在早期版本的 C 语言中被广泛使用,但现在更推荐使用如 `memcpy()`、`memset()` 等函数来替代 `bcopy()` 和 `bzero()`,因为后者已经被认为是非标准的或已被废弃。此外,了解如何使用这些函数对于理解 C ...

    VC常用系统函数.pdf

    5. **memmove**: 与`memcpy`类似,但即使源和目标区域有重叠,`memmove`也能确保正确地复制数据。 6. **memset**: 此函数用于将`dest`的前`count`个字节设置为字符`c`。返回值是`dest`的指针。 7. **_swab**: 这个...

    VC常用系统函数 (2).pdf

    - **memmove**:与`memcpy`类似,但即使源和目标区域重叠,`memmove`也能保证正确复制数据。 - **memset**:这个函数用于将`dest`指针指向的内存区域的前`count`个字节设置为字符`c`。 - **_swab**:这个函数...

    常用Keil C51库函数 (2).docx

    这些函数在 `STRING.H` 头文件中声明,用于处理字符串操作,如 `memcmp`、`memcpy`、`memchr`、`memccpy`、`memset` 和 `memmove`。 - `memcmp`:比较两个内存区域。 - `memcpy`:复制内存区域。 - `memchr`:...

    C语言常用系统函数[借鉴].pdf

    - `memmove()` 与`memcpy()`类似,但可以处理源和目标区域重叠的情况,保证正确拷贝数据。 - 需要包含的头文件:`<string.h>` 6. **memset()** - `memset()` 用于将`dest`指针所指向的内存区域的前`count`个字节...

Global site tag (gtag.js) - Google Analytics