C++中sizeof和strlen

来源:互联网 发布:淘宝千人千面是什么 编辑:程序博客网 时间:2024/06/07 12:24
      sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
     strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
       概念大概都很熟悉,但是碰到下面的题目很多人可能不能全对。
       牛客网上例题:       
32位系统上
1
2
charc1[]={'a','b','\0','d','e'};
charc2[]="hello";
sizeof(c1),strlen(c1),sizeof(c2),strlen(c2)值分别是 1 2 3 4 。

分析:
        字符数组c1有点特殊,里面包含一个字符串结束符‘\0’。
对字符数组,有以下几种定义方法:
1)        char str[]="12345";
或给字符串加上大括号:char str[]={"12345"};
这种方法定义时,系统自动在字符串的末尾加上字符串结束符,即 ‘\0’,
2)        char str[10]={'1','2','3','4','5'};
这种方法定义时,系统会自动从未初始化的元素开始,将之后的元素赋为\0,如上面的数组str中的元素实际上是:'1','2','3','4','5','\0','\0','\0','\0','\0'
3)        char str[]={'1','2','3','4','5'};
这种方法定义时,系统不会自动在字符串的末尾加上字符串结束符;

此时用sizeof()函数可以正确求出其所占的内存大小;但用strlen()函数不能正确求出其长度,因为strlen是通过\0判断字符串结束的。
              
32位系统上
1
2
charc1[]={'a','b','\0','d','e'};
charc2[]="hello";
sizeof(c1),strlen(c1),sizeof(c2),strlen(c2)值分别是5、2、6、5。
原创粉丝点击