《C库 — strlen和sizeof》

1.strlen函数

  strlen 函数用来求字符串的长度(包含多少个字符)。
  strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值。最终统计的字符串长度不包括\0。

头文件:string.h
语法/原型:
size_t strlen(const char* str);
参数 str 表示要求长度的字符串。

实例:

#include <stdio.h>
#include <string.h>
int main(){
    char str[100] = { 0 };
    size_t len;
    gets(str);      //gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
    len = strlen(str);
    printf("Length: %d\n", len);
    return 0;
}

  结果:  

  

 

 

2.strlen的函数实现(C语言)

#include <stdio.h>
#include <assert.h>
int strlen_new(const char* src)
{
    int len = 0;
    assert(src);
    while(*src++ != '\0')
        len ++;
    return len;
}
int strlen_new1(const char* str)
{
    const char *temp = str;
    assert(str);
    while(*str ++ !='\0');
    /*通过地址长度来取得*/
    return str - temp -1;
}

  

3.sizeof  

  sizeof是c语言中用来求字节运算符。(注意是运算符不是函数)

  作用:求出对象在计算机内存中所占用的字节数。

int main(int argc, char *argv[])
{
  char array[10] = {0};
  char *s = "zhuangquan";  

  sizeof(array);
  sizeof(s);    
}

  第一个输出是10,第二个是4(如果用的是32位的系统)。

  解释一下为什么数组是10。数组在程序编译阶段就会计算出数组的长度,然后就跟数组名绑定在一起了。

  从编译器角度来讲,数组变量也是变量,和普通变量和指针变量并没有本质不同。变量的本质就是一个地址,这个地址在编译器中决定具体数值,具体数值和变量名绑定,变量类型决定这个地址的延续长度(整形4字节、字符型1字节)。

4.sizeof和strlen的区别

  strlen计算不包含终止null字节的字符串长度。

  sizeof则计算包括终止null字节的缓冲区长度。

  两者之间的另一个差别是,使用strlen需进行一次函数调用,而对于sizeof而言,因为缓冲区已用已知字符串进行初始化,其长度是固定的,所以sizeof是在编译时计算缓冲区长度。

  

 

  输出结果:

  

 

posted @ 2019-04-16 19:14  一个不知道干嘛的小萌新  阅读(297)  评论(0编辑  收藏  举报