Chinaunix首页 | 论坛 | 博客
  • 博客访问: 106257
  • 博文数量: 23
  • 博客积分: 514
  • 博客等级: 中士
  • 技术积分: 195
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-01 14:21
文章分类

全部博文(23)

文章存档

2012年(23)

我的朋友

分类: C/C++

2012-02-06 17:37:30

       strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。
  而sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。
  char aa[10];cout<
  char aa[10]={'\0'}; cout<
  char aa[10]="jun"; cout<
  sizeof(aa) 返回10
  int a[10]; sizeof(a) 返回40

对于指针来说,一定要用strlen来求长度。
  char* ss = "0123456789";
  sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4
  sizeof(*ss) 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位
  strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen
  sizeof返回对象所占用的字节大小. //正确
  strlen返回字符个数. //正确

  在使用sizeof时,有一个很特别的情况,就是数组名到指针蜕变,
  char Array[3] = {'0'};
  sizeof(Array) == 3;
  char *p = Array; // Array 是指向Array[0]的地址,p是Array[0]的地址?
  strlen(p) == 1;//sizeof(p)结果为4
  在传递一个数组名到一个函数中时,它会完全退化为一个指针

阅读(1203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~