sizeof vs strlen
来源:互联网 发布:淘宝网站主要功能 编辑:程序博客网 时间:2024/04/27 15:03
本文转自:http://hi.baidu.com/fanjialin17/blog/item/88793d11678320cda6ef3f79.html
char c[] = “abc/0cba”;
问题1:sizeof(c) = ?
问题2:strlen(c) = ?
问题3:执行free(c);之后会有什么后果?
后来在linux+gcc上写了个小程序测试:
code:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char c[] = "abc/0cba";
printf("sizeof(c)=%d/n", sizeof(c));
printf("strlen(c)=%d/n", strlen(c));
free(c);
return 0;
}
result:
sizeof(c)=8
strlen(c)=3
*** glibc detected *** ./a.out: free(): invalid pointer: 0xbfa0209c ***
======= Backtrace: =========
/lib/libc.so.6[0x89d394]
/lib/libc.so.6(cfree+0x96)[0x89f346]
./a.out[0x8048480]
/lib/libc.so.6(__libc_start_main+0xe5)[0x8446d5]
./a.out[0x8048391]
======= Memory map: ========
00110000-00111000 r-xp 00110000 00:00 0 [vdso]
00809000-00829000 r-xp 00000000 fd:00 7603375 /lib/ld-2.9.so
0082a000-0082b000 r--p 00020000 fd:00 7603375 /lib/ld-2.9.so
0082b000-0082c000 rw-p 00021000 fd:00 7603375 /lib/ld-2.9.so
0082e000-0099c000 r-xp 00000000 fd:00 7603401 /lib/libc-2.9.so
0099c000-0099e000 r--p 0016e000 fd:00 7603401 /lib/libc-2.9.so
0099e000-0099f000 rw-p 00170000 fd:00 7603401 /lib/libc-2.9.so
0099f000-009a2000 rw-p 0099f000 00:00 0
05e04000-05e11000 r-xp 00000000 fd:00 7603424 /lib/libgcc_s-4.3.2-20081105.so.1
05e11000-05e12000 rw-p 0000c000 fd:00 7603424 /lib/libgcc_s-4.3.2-20081105.so.1
08048000-08049000 r-xp 00000000 fd:00 753674 /home/colin/workdir/test/a.out
08049000-0804a000 rw-p 00000000 fd:00 753674 /home/colin/workdir/test/a.out
09030000-09051000 rw-p 09030000 00:00 0 [heap]
b7eee000-b7ef0000 rw-p b7eee000 00:00 0
b7f04000-b7f05000 rw-p b7f04000 00:00 0
bf9ef000-bfa04000 rw-p bffeb000 00:00 0 [stack]
后来上网认真学了一下sizeof 和strlen的区别:
本质上而言,sizeof是一个运算符,它用类型作为参数,而strlen只是C库提供的一个函数,他用来计算以’/0’结果的字符串的长度,即它的参数只能是char*。它们相同的地点就只是返回值,都是一个size_t类型的值。
strlen的结果要在运行的时候才能计算出来,是用来计算字符串的实际长度,而sizeof的结果是在编译的时候就计算过的,是类型或变量占内存的大小。
注意:sizeof计算的是类型或者变量占内存的大小。
strlen函数的libc的实现
sizeof
- sizeof vs strlen
- sizeof VS strlen
- sizeof vs. strlen enum
- sizeof VS strlen
- sizeof VS strlen
- sizeof VS strlen
- C strlen vs sizeof
- strlen VS sizeof
- sizeof vs strlen
- strlen, sizeof
- sizeof strlen
- sizeof && strlen
- sizeof strlen
- sizeof && strlen
- strlen sizeof
- sizeof strlen
- sizeof strlen
- sizeof strlen
- MMORPG开发之七日创世说(一)
- 用C#创建COM组件全过程
- Biztalk 2009在Windows 2008 R2环境中的High Availability(Cluster群集)部署(上)--AP模式
- 怎样成为一个合格的测试工程师
- PowerDesigner使用建议(完整版) 用实体关系图进行数据库建模
- sizeof vs strlen
- Delphi FTP例子源码
- WM短信开发
- sql server 存储过程事务处理
- Python学习笔记1
- java环境变量的配置总结
- java环境变量的配置总结
- 如何自动执行与 c + + 嵌入 Office ActiveX 文档
- CMS厂商