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.
------------------ 内容增加中 -------------------
阅读(1215) | 评论(0) | 转发(0) |