`
samuschen
  • 浏览: 407560 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

strcpy, memcpy和memmove的区别

 
阅读更多
char* strcpy(char* strDest, const char* strSrc)
{
ASSERT(strDest != NULL && strSrc != NULL);
char* strTmpD = strDest;
while ((*strTmpD++ = *strSrc++) != '0')
{
}
return strDest ;
}

void* memcpy(void* pDest, const void* pSrc, unsigned int size)
{
ASSERT(pDest != NULL && pSrc != NULL);
byte* pTmpD = (byte*)pDest;
byte* pTmpS = (byte*)pSrc;
while (size-- >0)
{
  *pTmpD++ = * pTmpS++;
}
return pDest;
}

2.strcpy和memcpy的区别

(1).strcpy只能用于字符串拷贝;而memcpy是
存拷贝,可以拷贝任何类型的数据。

(2).当二者都进行字符串拷贝时,strcpy遇到字符串结尾'/0'即完成;而memcpy只是内存的原样拷贝,不管遇到什么。
void * __cdecl memcpy (void * dst, const void * src, size_t count)
{
        void * ret = dst;

        /*
         * 从低地址向高地址依次复制
         */
        while (count--) {
                *(char *)dst = *(char *)src;
                dst = (char *)dst + 1;
                src = (char *)src + 1;
        }

        return(ret);
}

void * __cdecl memmove (void * dst, const void * src, size_t count)
{
        void * ret = dst;

        if (dst <= src || (char *)dst >= ((char *)src + count)) {
                /*
                 * 当src和dst无重叠区域时
                 * 从低地址向高地址依次复制
                 */
                while (count--) {
                        *(char *)dst = *(char *)src;
                        dst = (char *)dst + 1;
                        src = (char *)src + 1;
                }
        }
        else {
                /*
                 * 当src和dst有重复区域时

                 * 从高地址向低地址依次复制
                 */
                dst = (char *)dst + count - 1;
                src = (char *)src + count - 1;

                while (count--) {
                        *(char *)dst = *(char *)src;
                        dst = (char *)dst - 1;
                        src = (char *)src - 1;
                }
        }

        return(ret);
}

1.memmove

函数原型:void *memmove(void *dest, const void *source, size_t count)

返回值说明:返回指向dest的void *指针

参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数

函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。



2.memcpy



函数原型:void *memcpy(void *dest, const void *source, size_t count);

返回值说明:返回指向dest的void *指针

函数说明:memcpy功能和memmove相同,但是memcpy中dest和source中的区域不能重叠,否则会出现未知结果。
分享到:
评论

相关推荐

    常用函数的实现strcpy,memcpy,memmove,strcat,strcmp原型

    本文将深入解析五个常用的C语言函数:`strcpy`、`memcpy`、`memmove`、`strcat`和`strcmp`的实现原理与功能特性,这些函数在处理字符串复制、连接、比较以及内存拷贝时扮演着关键角色。 ### 1. `strcpy` - 字符串...

    memmove、memcpy和memccpy简介.docx

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

    memcpy 和strcpy 的区别

    memcpy 和 strcpy 的区别 memcpy 和 strcpy 都是标准 C 库函数,都是用于从一块内存复制一段连续的数据到另一块内存,但是它们之间存在一些关键的区别。 首先,strcpy 函数用于复制字符串,它从源字符串的起始地址...

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

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

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

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

    memcpy 函数.pdf

    ### `memcpy`与`strcpy`的区别 1. **复制内容**:`strcpy`只能复制字符串(以`\0`结尾的字符序列),而`memcpy`可以复制任何类型的数据,不限于字符串。 2. **复制方法**:`strcpy`不需要指定长度,它会一直复制...

    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 ...

    memcpy 函数 (2).pdf

    4. **与strcpy的区别**: - **复制内容**:`strcpy`只适用于复制字符串,而`memcpy`可以复制任何类型的数据。 - **复制方式**:`strcpy`不需指定长度,直到遇到`\0`为止;`memcpy`需要提供确切的复制长度。 - **...

    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 ...

    memcpy, memcpy()函数,字符串拷贝

    2. **与`strcpy`的区别**:`strcpy`函数仅用于字符串的复制,并且会自动复制到空字符`\0`为止,而`memcpy`则不考虑空字符,它可以用来复制任意类型的字节序列。 3. **目标内存的管理**:每次使用`memcpy`之前必须...

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

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

    编程函数-memcpy函数

    2. **遇到终止符**:与`strcpy`不同,`memcpy`不会在遇到`\0`字符时停止复制,它会一直复制到指定的`n`个字节为止。 3. **覆盖原有数据**:如果目标数组`destin`已经有数据,`memcpy`执行后会覆盖原有的数据。如果...

    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编程有...

    c的几个string库函数简单实现

    本文将详细介绍C语言中的string库函数的实现,包括strlen、strcpy、strcat、strcmp、strstr、memcpy和memmove等函数的实现。这些函数都是C语言中常用的字符串操作函数, MASTERING它们对于编写高效的程序至关重要。 ...

    【字符串函数】strcpy的使用及原理

    6. **避免字符串重叠**:`strcpy`不处理字符串重叠的情况,即源字符串和目标字符串有交集。如果需要处理这种情况,可以使用`memmove`函数。 总结,`strcpy`是C语言中进行字符串复制的基本工具,但使用时需谨慎,...

    自己总结的面试题字符串

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

    C语言面试总结

    8. **strcpy、memcpy、memmove函数实现**:这些函数用于内存操作,`strcpy`复制字符串,`memcpy`用于任意内存块的复制,`memmove`与`memcpy`类似,但当源和目标区域重叠时也能正确处理。 9. **结构体struct与联合...

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

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

Global site tag (gtag.js) - Google Analytics