zoukankan      html  css  js  c++  java
  • memset,memcpy,strcpy 的区别

    一.函数原型
       strcpy
       extern char *strcpy(char *dest,char *src);
       #include <string.h>
       功能:把src所指由NULL结束的字符串复制到dest所指的数组中
       说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
       返回指向dest的指针

    memcpy
    extern void *memcpy(void *dest,void *src,unsigned int count);
    #include <string.h>
       功能:由src所指内存区域复制count个字符串到dest所指内存区域.
       说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针.
      
       memset
       extern void *memset(void *buffer,int c,int count);
       #include <string.h>
       功能:把buffer所指内存区域的前count个字节设置成字符c
       说明:返回指向buffer的指针.

     

    二.区别
        memset 用来对一段内存空间全部设置为某个字符,一般用于在对定义的字符串初始化为' '或者'\0';
        例: char a[100];
              memset(a,'\0',sizeof(a));
       
       memcpy 是用来做内存拷贝,可以用来拷贝任何数据类型的对象,可以指定拷贝的数据长度;
       例:
               char a[100],b[50];
               memcpy(b,a,sizeof(b));   //注意:如果使用sizeof(a),会造成内存溢出
       mem是一段内存,他的长度,必须自己记住.memcpy是见着什么拷贝什么。
       
        strcpy 就只能拷贝字符串,它遇到'\0'就结束拷贝;
          例:char a[100],b[50];
                  strcpy(a,b);
                  如用strcpy(b,a)要注意a中的字符串长度(第一个'\0'之前) 是否超过50,如果超过,则会造成b的
    内存溢出.它是不会拷贝'\0'的,所以一般还有加一个语句:
                  *a='\0';
      
    三.使用技巧
          memset 可以方便的清空一个数据结构的变量或数组.
          如:
            struct sample_struct
           {
                  char csName[16];
                  int iSeq;
                  int iType;
           };
           对于变量
           struct sample_struct stTest;
           一般情况下,初始化stTest的方法:
            stTest.csName[0]='\0';
            stTest.iSeq=0;
            stTest.iType=0;
        而用memset:
           memset(&stTest,0,sizeof(struct sample_struct));
        如果是数组:
        struct sample_struct TEST[100];
        memset(TEST,0,sizeof(struct sample_struct)*100);

      

     

    strcpy是拷贝字符串,以\0为标志结束(即一旦遇到数据值为0的内存地址拷贝过程即停止)
    strcpy的原型为
    char *strcpy(char *dest, const char *src)
    而memcpy是给定来源和目标后,拷贝指定大小n的内存数据,而不管拷贝的内容是什么(不仅限于字符)
    memcpy的原型为
    void *memcpy(void *dest, const void *src, size_t n);
    作者:张锋
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
    更多精彩文章可以观注
    微信公众号 soft张三丰

    微信交流群,添加群主微信,邀请入群
  • 相关阅读:
    OutputCache 缓存key的创建 CreateOutputCachedItemKey
    Asp.net Web Api源码调试
    asp.net mvc源码分析DefaultModelBinder 自定义的普通数据类型的绑定和验证
    Asp.net web Api源码分析HttpParameterBinding
    Asp.net web Api源码分析HttpRequestMessage的创建
    asp.net mvc源码分析ActionResult篇 RazorView.RenderView
    Asp.Net MVC 项目预编译 View
    Asp.net Web.config文件读取路径你真的清楚吗?
    asp.net 动态创建TextBox控件 如何加载状态信息
    asp.net mvc源码分析BeginForm方法 和ClientValidationEnabled 属性
  • 原文地址:https://www.cnblogs.com/skyme/p/1931206.html
Copyright © 2011-2022 走看看