Chinaunix首页 | 论坛 | 博客
  • 博客访问: 893912
  • 博文数量: 132
  • 博客积分: 9976
  • 博客等级: 中将
  • 技术积分: 1781
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-30 20:40
文章分类

全部博文(132)

文章存档

2013年(1)

2011年(1)

2010年(15)

2009年(77)

2008年(36)

2007年(2)

我的朋友

分类: C/C++

2008-02-29 09:28:29

sizeof 和 strlen的区别
 
原来一直搞不太清楚, 看下面的例子, 对如何确定结构体变量的所占内存空间的大小有好处。

      1 #include
      2
      3 typedef struct Pack {
      4     int aa;
      5     char bb[60];
      6 } pack;
      7
      8 int main(void){
      9
     10     char a[30]="hello world";
     11     pack *mypack;
     12     mypack = (pack *)calloc(sizeof(pack), 1);
     13
     14     mypack->aa = 1;
     15     sprintf(mypack->bb, "ni hao.");
     16     printf("\n\
     17 sizeof(a)=%d\n\
     18 strlen((char *)a)+sizeof(mypack->aa) + 1 = %d\n\
     19 ",
     20             sizeof(a),
     21             strlen((char *)a)+1
     22           );
     23
     24     printf("\n\
     25 sizeof(*mypack)=%d\n\
     26 strlen(mypack->bb)+sizeof(mypack->aa)+1 = %d\n\
     27 mypack->aa=%d\n\
     28 mypack->bb=%s\n\
     29 \n\n",
     30                     sizeof(*mypack),
     31                     strlen(mypack->bb) + sizeof(mypack->aa) +1,
     32                     mypack->aa,
     33                     mypack->bb
     34           );
     35
     36     free((void *)mypack);

             printf("sizeof(\"hello\") = %d,  strlen(\"Hello\") = %d\n\n",
                        sizeof("hello"),
                        strlen("Hello"));
     37 }
     38
程序输出结果:
sizeof(a)=30
strlen((char *)a)+sizeof(mypack->aa) + 1 = 12

sizeof(*mypack)=64 // 输出的是结构体所占内存空间的大小
// sizeof(mypack->bb)的大小是60, 即定义结构体时的大小。
strlen(mypack->bb)+sizeof(mypack->aa)+1 = 12
// strlen(mypack->bb) 的大小是结构体数组成员内字符串的大小。 注意,不包括结束符'\0'
mypack->aa=1
mypack->bb=ni hao.

sizeof("hello") = 6,  strlen("Hello") = 5

通过这个例子可以对sizeof和strlen的区别有个大致的了解。           
the author is : nlchjian.
------------------ 内容增加中 -------------------
阅读(1189) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~