Chinaunix首页 | 论坛 | 博客
  • 博客访问: 95416
  • 博文数量: 15
  • 博客积分: 286
  • 博客等级: 二等列兵
  • 技术积分: 202
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-05 09:30
文章分类

全部博文(15)

文章存档

2012年(15)

分类: C/C++

2012-05-11 19:28:33

sizeof返回的是对象或数据类型占内存的字节数。
strlen(*ptr)求的是字符串的实际长度,它的方法从首地址开始判断直到'\0'结束。
看下面的例子:
char *str = "abcde";
 
sizeof(str) = 4;//string是一个指针
sizeof(*str) = 1;//*str = 'a'
sizeof(str[2]) = 1;//str[2] = 'c'
 
strlen(str) = 5;//str共有5个字符
strlen(str+2) = 3;//从'c'到结束有3个字符
strlen(*str)//运行时会出现错误,因为传入的值为'a'的值,可能是操作系统保护的内存,不允许访问
 
char str[5] = {'a','b','c','d','e'};
 
sizeof(str) = 10;//当sizeof的操作数为数组时,返回的是数组的长度
sizeof(*str) = 1;//*str = 'a'
sizeof(str[2]) = 1;//str[2] = c
 
strlen(str) = 未知;
strlen(str+2) = 未知;//因为是strlen是判断到'\0'才返回的,不知道在内存的什么地方会遇到'\0'
strlen(*str))//运行时会出现错误,因为传入的值为'a'的值,可能是操作系统保护的内存,不允许访问
 
int str[5] = {1,2,3,4,5};
sizeof(str) = 20;//int型占4个字节*5 = 20
sizeof(*str) = 4;//指针4个字节
sizeof(str[2]) = 4;
 
strlen(str) = 1;//1在内存的存储为0x01 0x00 0x00 0x00,'\0'==0x00,所以判断到0x00时就返回了
strlen(str+2) = 1;//2在内存的存储为0x02 0x00 0x00 0x00,'\0'==0x00,所以判断到0x00时就返回了
strlen(*str)出错))//运行时会出现错误,因为传入的值为1,可能是操作系统保护的内存,不允许访问
阅读(1610) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~