• strcpy、strncpy、memcpy、memove的区别


    char *strcpy(char *dest, const char *src);

    1.将src所指的字符拷贝到dest所指的空间内,直到拷贝完''后停止拷贝

    2.dest所指的空间和src所指的空间不能有重叠,否则会相互覆盖。不能达到预期。

    3.dest所指的空间要足够容纳src的所有字符,包括最末尾的''。否则将会越界。

    4.拷贝以src所指空间末尾的''为结束条件,因此将有可能导致出现越界,空间重叠的问题。

    大致实现:

    const char* myStrcpy(char *dest, const char *src)
    {
        assert(dest != NULL && src != NULL);
        char *pBegin = dest;
        while ((*dest++ = *src++) != '')
            ;
        return pBegin;
    }

    char *strncpy(char *dest, const char *src, size_t n);

    1.从src所指的空间内拷贝n个字符到dest的空间内。

    2.如果src不足n个字符,那么就用''凑齐n个字符拷贝到dest内。

    3.如果n个字符里面没有'',那么dest空间内将没有''

    4.dest空间要足够容纳n个字符,否则将出现越界

    大致实现:

    char *myStrncpy(char *dest, const char *src, int n)
    {
        int i = 0;
        for (i = 0; i < n && src[i] != ''; ++i)
        {   
            dest[i] = src[i];
        }
                                                                                                                                              
        for (; i < n; ++i)
        {
            dest[i] = ''; 
        }
        return dest;
    }

    void *memcpy(void *dest, const void *src, size_t n);

    1.从src所指的空间拷贝n个字节到dest所指的空间内。

    2.和strncpy的区别是不会遇到''就停止后续的拷贝

    3.n设置不当有越界的可能行

    4.内存不能重叠,否则相互覆盖

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

    1.和memcpy的功能类似

    2.允许src和dest所指的空间内存有重叠,能预期实现拷贝。

    大致实现:

    char *myMemmove(char *dest, const char *src, int n)
    {
        char *pBegin = dest;
        if (src > dest)
        {                                                                                                                                     
            while(n--)
            {
                *dest++ = *src++;   
            }   
        }
        else if(src < dest)
        {
            while(n--)
            {
                *(dest-1+n) = *(src-1+n);
            }
        }
        return pBegin;
    }
  • 相关阅读:
    go,指针
    go ,字符串的编码及如何统计字符长度,
    go中的map,如python中的字典
    go 可变长参数的应用
    go 数组切片
    Django 模板层
    Django的路由层和视图层
    Django
    Django简介
    JQurey
  • 原文地址:https://www.cnblogs.com/jialin0x7c9/p/14202986.html
Copyright © 2020-2023  润新知