`

memset,memcpy与memmove,strcpy

    博客分类:
  • c++
 
阅读更多
void *memset( void *buffer, int ch, size_t count );
memset函数将buffer的前count项设置成ch

void *memcpy(void *dst,void *src,size_t count);
memcpy函数用来进行内存拷贝,用户可以使用它来拷贝任何数据类型的对象。由src所指内存区域将count个字节复制到dst所指内存区域。但是src和dst所指内存区域不能重叠,该函数返回指向dst的指针。

void* memmove(void* dst,const void* src,size_t count);
memmove的作用是将一块内存区域中的数据移向另一块区域,它将返回指向目标区域值的指针。如果src和dst所指内存区域重叠,那么该函数会在重叠区域被重写之前对其中内容进行拷贝。

char* strcpy(char* dst,char* src)
strcpy函数的功能是把src所指的由NULL结束的字符串复制到dst所指的字符串中。其中,src和dst所指内存区域不可以重叠,且dst必须有足够的空间来容纳src的字符串,该函数返回指向dest的指针。

strcpy与memcpy的差别
strcpy只能用来做字符串的拷贝,而memcpy是用来做内存拷贝的,strcpy会一遇到'\0'就结束copy,而memcpy不会

memmove与memcpy的差别
体现在dest的头部和src的尾部有重叠的情况下

#include<iostream>
#include<string.h>
using namespace std;

int main()
{
    char *c = "abc";
    char *d = new char[sizeof(c)+1];
    strcpy(d,c);
    d[sizeof(d)-1]='\0';
    cout << "strcpy c to d:" << d << endl;
    char e[10];
    memset(e,'3',5);
    cout << "memset:" << e << endl;
    char f[11];
    memcpy(f,e,sizeof(e));
    cout << "memcpy from e to f:" << f << endl;
    char g[10];
    memmove(g,f,sizeof(g));
    cout << "memmove f to g,f:" << f << endl;
    cout << "memmove f to g,g:" << g << endl;

    cout << "diff memmove and memcopy:" << endl;
    int h[10] = {1,2,3,4,5,6,7,8,9,10};
    memmove(&h[4],h,sizeof(int)*6);
    cout << "memmove:";
    for(int i=0;i<sizeof(h)/sizeof(int);i++)
        cout << h[i] << " ";
    cout << endl;
    int j[10] = {1,2,3,4,5,6,7,8,9,10};
    memcpy(&j[4],j,sizeof(int)*6);
    cout << "memcpy:";
    for(int i=0;i<sizeof(j)/sizeof(int);i++)
        cout << j[i] << " ";
    cout << endl;
}



strcpy c to d:abc
memset:33333
memcpy from e to f:33333
memmove f to g,f:33333
memmove f to g,g:33333
diff memmove and memcopy:
memmove:1 2 3 4 1 2 3 4 5 6 
memcpy:1 2 3 4 1 2 3 4 1 2 
分享到:
评论

相关推荐

    浅析C++中memset,memcpy,strcpy的区别

    在C++编程中,`memset`, `memcpy`, 和 `strcpy` 是三个经常使用的函数,用于处理内存区域的数据操作。它们各自有不同的用途和特点,本文将深入解析它们的区别。 `memset` 函数是用来设置一块内存区域的值。其原型为...

    memmove、memcpy和memccpy简介.docx

    strcpy、memcpy、memmove 和 memset 四个函数都是用于字符串和内存操作的,但是它们之间有一些区别: * strcpy 函数用于字符串拷贝,但是它不知道拷贝的字节数目,它会一直拷贝直到遇到字符串结束符 '\0'。 * ...

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

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    C 语言库函数使用手册

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    C语言库函数速查 CHM

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    C语言函数速查手册

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    常见面试需要实现的函数std_func.c

    * 常见的字符串函数实现: * strlen * strcpy strncpy * strcmp strncmp * strcat strncat * strstr * * 内存操作: * memset、memcmp、memcpy、memmove * * 字符串和数组转换: * atoi itoa *

    C语言函数速查

    memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup stricmp strlen strlwr strncat strncmp strncmpi strncpy strnicmp strpbrk ...

    C语言字符串各函数-具体实现

    strcpy,strncpy,strcat,strncat,strcmp,strncmp,strchr,strnchr,strlen,strnlen,strspn,strpbrk,strtok,strsep,memset,bcopy,memcpy,memmove,memcmp,memscan,strstr,memchr.函数具体实现内容。对理解C语言和C编程有...

    自己总结的面试题字符串

    本文将深入探讨`memset`、`strcpy`、`memcpy`以及`memmove`这四个函数的使用和区别。 首先,`memset`函数用于填充内存。它的原型是`void *memset(void *buffer, char c, int count)`,接受一个内存缓冲区的指针`...

    Linux下C函数库

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

    c语言与指针 个人觉得最好用的书

    * 字符串拷贝和内存拷贝函数:strcpy、strncpy、memcpy、memmove、memcmp、bcopy * 字符串和内存数据比较函数:strcmp、strcasecmp、strncasecmp、memcmp、strcoll、bcmp * 连接字符串的函数:strcat、strncat * ...

    C语言基本库函数大全

    8. **标准库辅助函数(Utility Functions)**:memset、memcpy、memmove用于块内存操作,strtok分割字符串,strstr查找子字符串。 9. **控制流(Control Flow)**:exit退出程序,abort强制异常终止,setjmp/...

    linux-c-function-manual.zip_linux manual

    4. **内存管理**:手册中详细讨论了内存管理相关的函数,包括动态内存分配(malloc、calloc、realloc、free),以及内存拷贝(memcpy、memmove、memset)和比较(memcmp)等。 5. **错误处理与调试**:在编程过程中...

    Linux C函数库参数手册(PDF)

    而mem*函数,如memcpy、memmove和memset,则用于内存块的复制、移动和初始化。 4. **错误处理与诊断**:errno全局变量和perror函数用于报告错误,assert宏用于调试期间的断言检查。 5. **文件与目录操作**:fopen...

    字符串函数详解

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

    C/C++中的mem函数和strcopy函数的区别和应用

    下面我们将详细探讨`strcpy`和`memcpy`的区别,以及`memmove`和`memset`的功能。 首先,`strcpy`函数是专为字符串复制设计的。它存在于`&lt;string.h&gt;`头文件中,其原型为`char *strcpy(char *dest, const char *src)`...

    免费linux c 编程开发函数大全

    4. **内存管理和指针操作**:C语言中的指针操作是其精髓之一,如memcpy、memmove用于内存块的复制,memset用于设置内存区域的值,这些函数在处理复杂数据结构时非常有用。 5. **进程和线程管理**:在Linux系统中,...

    史上最全的C程序员面试题

    - **内存操作**:如memcpy, memmove, memset等函数的使用。 这些只是C语言面试中可能涉及的一些核心知识点,实际面试还可能涵盖更具体的技术问题,例如位操作、编译器优化、数据结构和算法等。通过深入学习和实践...

    Linux C语言函数大全(htm 版,比较全)

    6. **指针操作函数**:如memcpy、memmove、memset等,用于内存区域的复制、移动和填充。 7. **错误处理和诊断函数**:如errno、perror、assert等,帮助开发者识别和调试程序错误。 8. **标准库函数**:如stdlib.h...

Global site tag (gtag.js) - Google Analytics