zoukankan      html  css  js  c++  java
  • strlen 和 sizeof 取字符串长度的区别

    首先,strlen是函数,sizeof是运算操作符,二者得到的结果类型为size_t,即unsigned int类型。大部分编译程序在编译的时候就把sizeof计算过了,而strlen的结果要在运行的时候才能计算出来。

    sizeof计算的是变量的大小,而strlen计算的是字符串的长度,前者不受字符’’影响,后者以’’作为长度判定依据。

    对于以下语句:

    int main()
    {
        char *str1 = "asdfgh";
        char str2[] = "asdfgh";
        char str3[8] = {'a', 's', 'd'};
        char str4[] = "asdf";
    
        printf("sizeof(str1)=%d
    ",sizeof(str1));
        printf("strlen(str1)=%d
    ",strlen(str1));
    
        printf("sizeof(str2)=%d
    ",sizeof(str2));
        printf("strlen(str2)=%d
    ",strlen(str2));
    
        printf("sizeof(str3)=%d
    ",sizeof(str3));
        printf("strlen(str3)=%d
    ",strlen(str3));
    
        printf("sizeof(str4)=%d
    ",sizeof(str4));
        printf("strlen(str4)=%d
    ",strlen(str4));
    
        return 0;
    }

    执行结果是:

    sizeof(str1) = 4;  strlen(str1) = 6;
    sizeof(str2) = 7;  strlen(str2) = 6;
    sizeof(str3) = 8;  strlen(str3) = 3;
    sizeof(str4) = 6;  strlen(str4) = 2;

    str1是字符指针变量,sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,所以结果是4;strlen返回的是该字符串的长度,遇到’’结束,’’本身不计算在内,故结果是6。

    str2是字符数组,大小由字符串常量”asdfgh”确定,sizeof获得该数组所占内存空间大小,包括字符串结尾的’’,所以结果为7;strlen同理返回6。

    str3也是字符数组,但大小确定为8,故sizeof得到的结果是8;strlen统计’’之前所有字符的个数,即为3;

    str4是常量字符数组,sizeof得到字符总数即6;strlen计算至’’结束,因此返回2;

  • 相关阅读:
    JavaScript之MV*模式
    JavaScript之命名空间模式 浅析
    设计模式漫谈
    JavaScript之作用域与闭包详解
    JavaScript数据检测
    Code Conventions for the JavaScript Programming Language
    Javascript之对象的继承
    多线程,进程,协程用法
    scrapy_redis 实现多进程配置部分代码
    自己设计代理IP池
  • 原文地址:https://www.cnblogs.com/CincentHuang/p/15190244.html
Copyright © 2011-2022 走看看