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

 更新时间:2013年07月12日 08:48:47   作者:  
本篇文章是对C++中memset,memcpy,strcpy的区别进行了详细的分析介绍,需要的朋友参考下
复制代码 代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

//memcpy:按字节复制
原型:extern void* memcpy(void *dest,void *src,unsigned int count)
//功能:由src所指内存区域复制count个字节到dest所指的内存区域;
//同strcpy
void *memcpy_su(void *dest, void *src, unsigned int count)
{

       assert ((dest!=NULL)&&(src!=NULL));
       char* bdest = (char*)dest;
       char* bsrc = (char*) src;
       while(count-->0)
        *bdest++ = *bsrc++;
       return dest;
}

//strcpy:复制字符串,遇到'\0'就结束
//原型:extern char *strcpy(char *dest,char *src)
//功能:把src所指由'\0'结束的字符串复制到dest所指的数组中;
//说明:src和dest所指内存区域是不可以重叠的且dest必须有足够的空间来容纳字符串。返回dest指针。
char *strcpy_su(char *dest,char *src)
{
       assert((dest!=NULL)&&(src!=NULL));
       char *address = dest;
       while((*dest++=*src++)!='\0')
              continue;
       return dest;
}
//memset:设置buffer所指的内存区域的前count个字节,用字符c来代替
//原型:extern void *memset(void *buffer,int c,int count);
 void *memset_su(void *buffer, int c, int count)
{
   assert ((buffer!=NULL));
   char* buffer2 = (char*)buffer;
   while(count-->0)
        *buffer2++ = c;
       return buffer;
}

void main()
{
       char str1[100]="abchjhgjghjgjgh";
       char str2[50]="efghdfkdjf";

       strcpy(str1, str2);
       printf("%s\n",str1);

 
       char a[3];
       memset(a, 'a', sizeof(a)-1);
       memset(&a[2], '\0',1);
       printf("%s\n",a);

     
       memcpy(str1, str2, strlen(str2));
       printf("%s\n",str1);

}

相关文章

  • 关于C/C++中的side effect(负效应)和sequence point(序列点)

    关于C/C++中的side effect(负效应)和sequence point(序列点)

    不知你在写code时是否遇到这样的问题?int i = 3; int x = (++i) + (++i) + (++i); 问x值为多少?进行各种理论分析,并在编译器上实践,然而可能发现最终的结果是不正确的,也是不稳定的,不同的编译器可能会产生不同的结果。这让人很头疼
    2013-10-10
  • C++实现猜数字游戏

    C++实现猜数字游戏

    这篇文章主要为大家详细介绍了C++实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C程序中可怕的野指针图文详解

    C程序中可怕的野指针图文详解

    这篇文章主要给大家介绍了关于C程序中可怕的野指针的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • 先序遍历二叉树的递归实现与非递归实现深入解析

    先序遍历二叉树的递归实现与非递归实现深入解析

    以下是对先序遍历二叉树的递归实现与非递归实现进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-07-07
  • 利用OpenCV实现局部动态阈值分割

    利用OpenCV实现局部动态阈值分割

    这篇文章主要为大家详细介绍了利用OpenCV实现局部动态阈值分割,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++ vector扩容解析noexcept应用场景

    C++ vector扩容解析noexcept应用场景

    这篇文章主要介绍了C++ vector扩容解析noexcept应用场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 基于VC中使用ForceInclude来强制包含stdafx.h的解决方法

    基于VC中使用ForceInclude来强制包含stdafx.h的解决方法

    本篇文章是对VC中使用ForceInclude来强制包含stdafx.h的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++ Opengl旋转功能附源码下载

    C++ Opengl旋转功能附源码下载

    这篇文章主要介绍了C++ Opengl旋转功能附源码下载,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 详解C++中string的用法和例子

    详解C++中string的用法和例子

    string是C++标准库的一个重要的部分,主要用于字符串处理。这篇文章主要介绍了C++ string的用法和例子,需要的朋友可以参考下
    2018-05-05
  • C++归并算法实例

    C++归并算法实例

    这篇文章主要介绍了C++归并算法,实例分析了C++实现基于归并算法合并线性表的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07

最新评论