首页 > 其他分享 >strcpy、strncpy、memcpy 区别与实现

strcpy、strncpy、memcpy 区别与实现

时间:2023-10-23 16:57:25浏览次数:29  
标签:src dest char strcpy NULL memcpy strncpy size

strcpy、strncpy、memcpy 的区别

strcpy

  1. 描述
  • 将一个字符串复制到另一个字符串中
  1. 实现
char *myStrcpy(char* dest, const char* src){
    if ((NULL == dest) || (NULL == src)){
        return NULL;
    }

    char *strDest = dest;
    const char *strSrc = src;
    while ((*dest++ = *strSrc++) != '\0');
    return strDest;    
}

strncpy

  1. 描述
  • 将一个字符串的前 count 字节复制到另一个字符串中
  1. 实现
char* strncpy(char* dest, const char* source, size_t count){
    if (NULL == dest || NULL == source || count <= 0){
        return NULL;
    }

    char *start = dest;
    while (count && (*dest++ = *source++)){
        count--;
    }

    if (count){
        while(--count){
            *dest ++ = '\0';
        }
    }

    return (start);
}

memcpy

  1. 描述
  • 将一块内存中的内容复制到另一块内存中
  1. 实现
void *myMemcpy(void *dest, const void *src, size_t size){
    if(NULL == dest || NULL == src){
        return NULL;
    }

    char *pDest = NULL;
    char *pSrc = NULL;

    if ((src < dest) && ((char*)src + size > (char*)dest)){
        pDest = (char *)dest + size - 1;
        pSrc = (char *)src + size - 1;
        while(size--){
            *pDest-- = *pSrc--;
        }
    }
    else{
        pSrc = (char *)src;
        pDest = (char *)dest;
        while (size--)
        {
            *pDest++ = *pSrc;
        }
    }
    
    return dest;
}

区别

  • strcpy 遇到空字符串复制操作停止
  • strncpy 复制指定数量的字符
  • memcpy 复制指定内存字节

标签:src,dest,char,strcpy,NULL,memcpy,strncpy,size
From: https://www.cnblogs.com/wanghao-boke/p/17782849.html

相关文章

  • Windows下VC++编译器32位memcpy、memmove函数汇编代码详解
    整理者:赤勇玄心行天道QQ号:280604597微信号:qq280604597QQ群:511046632博客:www.cnblogs.com/gaoyaguo  blog.csdn.net/cyz7758520?type=blog大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的!你可以随意转载,无需注明出处!写文档实属不易,我希望大家能支......
  • strcpy
    一、实现我们先看函数传递的参数,是两个指针,一个是strSource(字符串的源头),另一个是strDestination(字符串的目的地),因此,我们也需要传递两个指向字符串地址的指针。而我们知道库里的strcpy函数会传递源头字符串末尾的'\0',因此我么可以这样来写代码。代码如下:include<stdio.h>voi......
  • strncpy 出core
    core的堆栈是这样子的:(gdb)bt#00x00007ffff4a96a7cinpthread_kill()from/lib/x86_64-linux-gnu/libc.so.6#10x00007ffff4a42476inraise()from/lib/x86_64-linux-gnu/libc.so.6#20x00007ffff4a287f3inabort()from/lib/x86_64-linux-gnu/libc.so.6#30......
  • 内存函数,memcpy,memmove,memcmp,memset
    structs{ charname[20]; intage;};intmain(){ intarr1[]={1,2,3,4,5}; intarr2[5]={0}; structsarr3[]={{"张三",20},{"李四",18}}; structsarr4[3]; memcpy(arr4,arr3,sizeof(arr3)); //memcpy(arr2,arr1,sizeof(a......
  • strncpy strncat strncat
    1.strncpy函数定义:char *strncpy ( char * destination, const char * source, size_t num);•拷贝num个字符从源字符串到目标空间。•如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。2.strncat函数定义:char  strncat ( char * desti......
  • CUDA cudaMemcpy函数总结
    在使用cuda的时候一定会用到cudaMemcpy这个函数,因为我们就是用它实现数据在CPU与GPU之间的移动,想在GPU端计算就必须要将数据从CPU拷贝到GPU,想要获得GPU的计算结果就必须将结果拷贝回CPU。但是在使用这个函数的时候对它的第一个参数存在一些疑惑,经过查找资料后做个简单的总结。首......
  • CUDA Memcpy的分析
    CUDAMemcpy是一种CUDA库中的函数,可以在主机内存和设备内存之间复制数据。本文将从功能、使用方法、性能、优化等多个角度详细介绍CUDAMemcpy。一、功能CUDAMemcpy的主要功能是在设备内存和主机内存之间进行数据传输。它可以将主机上的数据发送到GPU上,也可以将GPU上的数据传输到......
  • C++面试八股文:如何实现一个strncpy函数?
    C++面试八股文:如何实现一个strncpy函数?某日二师兄参加XXX科技公司的C++工程师开发岗位第31面:面试官:strcpy函数使用过吧?二师兄:用过。面试官:这个函数有什么作用?二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。面试官:strncpy函数也使用过吧,和strcpy有......
  • C++面试八股文:如何实现一个strncpy函数?
    C++面试八股文:如何实现一个strncpy函数?某日二师兄参加XXX科技公司的C++工程师开发岗位第31面:面试官:strcpy函数使用过吧?二师兄:用过。面试官:这个函数有什么作用?二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。面试官:strncpy函数也使用过吧,和strcpy有......
  • memcpy赋值/复制速度快的底层
    memcpy赋值速度一般来说比多重for循环更快,对于其底层原理十分感兴趣,面向百度,总结了一些答案,不是很专业,就是理解个大概总的来说有这么两个主要原因:1.SIMD:就是使用多个微处理器对同一个数据进行操作,其实就是并行操作参考:https://zhuanlan.zhihu.com/p/553270372.......