sizeof与strlen

  • sizeof()计算一个类型的空间大小
  • strlen只用于计算字符串长度,寻找'\0'的位置,但是不包括'\0'位置

 

  • 例一:
    int b=strlen("\0b");
    int a=sizeof("\0b");

    输出b=0;a=3;  a为计算的该字符串所占的空间大小;

  • 例二:
    char a[10];
    char *b=new char[10];
    int x=sizeof(a);   //x=10;
    int y=sizeof(b);   //y=4;
    int z=sizeof(*b); //z=1;

    x计算的是数组所占的空间大小;
    y计算的是字符指针b所占的空间大小,32位机中所有的指针变量所占的空间大小为4个字节;
    z计算的是指针b所指向的第一个字符所占的空间大小,char型空间为1个字节;

  • 例三:
    char a[10];
    char *b=new char[10];
    int x=strlen(a); //随机数
    int y=strlen(b);  //随机数
    strcpy(b,"hello");
    int z=strlen(b); //z=5;

     

  • sizeof在计算结构体变量的空间时,需要遵循两个规则:
    1)结构体每个成员的首地址是成员大小的整数倍,有需要会在成员之间填充字节;
    2)结构体的总空间大小为最宽基本成员类型的整数倍。在寻找最宽成员时,需要将复合类型“打散”来看,比如结构体内包含另一个结构体,则把另一个结构体拆开来看。
    struct S1{
      int a;
      char b;    
    };//4+1+3=8
    struct s2{
      char c;
      S1 s;
      char d;      
    };//1+3+4+1+1+2=12,12是int型空间的整数倍

     

posted @ 2016-08-01 17:26  beaglebone  阅读(160)  评论(0编辑  收藏  举报