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

strcpy, memcpy, memmove, memset的实现

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

strcpy() 字符串拷贝

 

char *strcpy(char *strDest, const char *strSrc)
{
    assert((strDest!=NULL) && (strSrc !=NULL));
    char *address = strDest;     
    while( (*strDest++ = * strSrc++) != '\0'); 
    return address ;       
}

 

 

memcpy 拷贝不重叠的内存块 

 

void *memcpy(void* pvTo, void* pvFrom, size_t size) //byte是java里的变量类型
{
    assert(pvTo != NULL && pvFrom != NULL);
    byte* pbTo = (byte*)pvTo;
    byte* pbFrom = (byte*)pvFrom;
    /* 内存块重叠吗?如果重叠,就使用memmove */
    assert(pbTo>=pbFrom+size || pbFrom>=pbTo+size);
    while(size-->0)
        *pbTo++ == *pbFrom++;
    return pvTo;
}

 

 

memmove 可拷贝重叠的内存块

 

void* memmove(void *dest, const void *src,size_t n) 
{ 
    if (n == 0) return 0; 
    if (dest == NULL) return 0; 
    if (src == NULL)    return 0; 
    char *psrc = (char*)src; 
    char *pdest = (char*)dest; 
    if((dest <= psrc) || (pdest >= psrc + n)) /*检查是否有重叠问题 */ 
    { 
         for(int i=0; i < n; i++) /*正向拷贝*/ 
         { 
              *pdest = *psrc; 
               psrc++; 
               pdest++; 
         } 
    } 
    else /*反向拷贝*/ 
    { 
        psrc += n; 
        pdest += n; 
        for(int i=0;i<n;i++) 
        { 
            psrc--; 
            pdest--; 
            *pdest = *psrc; 
        } 
    } 
    return dest;
}
 

memset 把buffer所指内存区域的前count个字节设置成字符cvoid * memset(void* buffer, int c, int count)
{
    char* pvTo=(char*)buffer;
    assert(buffer != NULL);
    while(count-->0)
    *pvTo++=(char)c;
    return buffer;
}

分享到:
评论

相关推荐

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

    C语言函数速查

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

    自己总结的面试题字符串

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

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

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

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

    字符串函数详解

    这里有四个函数:`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)`...

    200个C语言常用函数实现代码大全.rar

    memcpy()和memmove()用于内存块的复制,memset()填充内存区域。 4. **数学运算**:math.h库提供了各种数学函数,如sqrt()平方根,pow()指数运算,sin()和cos()三角函数,fabs()求绝对值。 5. **输入/输出**:...

    Linux C函数库参考手册

    4. **字符串和字符处理**:str*系列函数如strcpy, strcat, strcmp, strchr等处理字符串,mem*系列函数如memcpy, memmove, memset处理内存块。 5. **数学函数**:math.h头文件包含了一系列数学函数,如sqrt用于...

    C语言总结:字符串函数封装练习(十四种示例).pdf

    除了`memcpy`,还有其他内存操作函数,如`memmove`,它可以在源和目标区域重叠时正确地移动数据,而`memcpy`在这种情况下的行为是未定义的。 这些函数都是C语言标准库`&lt;string.h&gt;`和`&lt;stdio.h&gt;`的一部分,它们在...

    C标准库源代码

    - `memcpy`和`memmove`:用于拷贝内存区域,`memcpy`假设源和目标不重叠,`memmove`则考虑可能的重叠。 - `memset`:设置内存块的每个字节为特定值。 - `malloc`和`free`:动态内存分配和释放,`calloc`用于零...

    string.h函数介绍.docx

    其函数原型为 `char *strcpy(char *dest, char *source)`,其中 dest 是目标字符串,source 是源字符串。strcpy 函数返回目标字符串的指针。 例如: ```c #include #include int main(void) { char string[10];...

    The C Library Reference Guide by Eric Huss

    7. **内存操作**:memcpy、memset、memmove等函数,用于高效地复制、填充或移动内存块。 8. **控制流**:包括条件判断(if, switch)、循环(for, while)、跳转(break, continue, goto)语句的使用。 9. **指针*...

    Linux下C函数库

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

    linux-c-function-manual.zip_linux manual

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

Global site tag (gtag.js) - Google Analytics