zoukankan      html  css  js  c++  java
  • memset ,memcpy 和strcpy 的根本区别?

    Memset  用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘’;
    例:char a[100];memset(a, '', sizeof(a));
         memset可以方便的清空一个结构类型的变量或数组。
    如:
    struct sample_struct
    {
     char   csName[16];
     int    iSeq;
     int    iType;
    };
    对于变量
    struct sample_strcut  stTest;
    一般情况下,清空stTest的方法:
    stTest.csName[0]='';
    stTest.iSeq=0;
    stTest.iType=0;
    用memset就非常方便:
    memset(&stTest,0,sizeof(struct sample_struct));
    如果是数组:
     struct sample_struct   TEST[10];

    memset(TEST,0,sizeof(struct sample_struct)*10);
    memcpy  用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度。
    例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。
    Strcpy   就只能拷贝字符串了,它遇到''就结束拷贝。
    例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘’之前)是否超过50位,如超过,则会造成b的内存地址溢出。
    str也可以用用个参数的strncpy(a,b,n)
    ========================================================
    memset主要应用是初始化某个内存空间。
    memcpy是用于copy源空间的数据到目的空间中。
    strcpy用于字符串copy,遇到‘’,将结束。
    如果你理解了这些,你应该知道他们的区别:例如你初始化某块空间的时候,用到memcpy,那么应该怎么写,是不是显得很笨。
      int  m[100]
    memset((void*)m,0x00,sizeof(int)*100);//Ok!
    memcpy((void*)m,"....",sizeof(int)*100);//it’s wrong.
  • 相关阅读:
    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
    Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析
    Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
    PAT 1152 Google Recruitment
    PAT 1092 To Buy or Not to Buy
    PAT 1081 Rational Sum
    PAT 1084 Broken Keyboard
    PAT 1077 Kuchiguse
    PAT 1073 Scientific Notation
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786920.html
Copyright © 2011-2022 走看看