zoukankan      html  css  js  c++  java
  • strlen和sizeof的区别

    strlen 是一个库函数,计算传进来的字符串的长度,以 ‘’结尾

    sizeof 是一个运算符,它计算的是传进来的指针在内存中所占空间大小,在编译时就已经获得了结果。

    C语言中没有字符串,用的是字符数组来模拟字符串。

    C风格的字符串时字符数组然后在末尾加0表示结尾。

    //在C语言中有strlen和sizeof两个函数求字符数组的长度函数,他们俩的区别就是是否把最后的结束标志也加上去。  //错误

    //strlen是不加的,他表示字符串的长度。  //错误

    而sizeof求的是字符串在内存中的长度,所以它是加上最后的''的

    //所以一般而言后者的长度会比前者多1。//错误

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char buf[] = "abcd";
        printf("sizeof(buf) = %d
    ",sizeof(buf));
        printf("strlen(buf) = %d
    ",strlen(buf));
    
        return 1;
    }

    运行结果:

    exbot@ubuntu:~/shareWin/CAndC++$ ./sizeofandstrlen
    sizeof(buf) = 5
    strlen(buf) = 4

    它们相差 1 并不是 sizeof 和 strlen 的问题,而是 buf 没有指定空间大小,直接初始化后需要多少空间在后面+1,所以表现出来的效果显示成sizeof结果比strlen大1

    strlen计算的是字符串到''位置的大小

    sizeof计算的字符串占的内存大小

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char str[100] = {0};
        strcpy(str, "abcd");
    
        int str_len = strlen(str);
        int str_size = sizeof(str);
    
        printf("strlen(str) = %d
    ", (str_len));
        printf("sizeof(str) = %d
    ", (str_size));
    
        return 0;
    }

    运行结果:

    ubuntu@ubuntu:~/workspace/test$ gcc sizeofAndStrlen.c -o sizeofAndStrlen
    ubuntu@ubuntu:~/workspace/test$ ./sizeofAndStrlen
    strlen(str) = 4
    sizeof(str) = 100

  • 相关阅读:
    Django (五) modeld进阶
    django (四) model模型
    django (三) admin后台系统
    Django (二) url 和 模板
    django (一) 环境的配置及Django文件简介
    Thinkphp5之Bootstrap自定义BootstrapDetailed分页插件的实现
    Thinkphp5之laypage分页插件的实现
    Thinkphp5之ajax分页实现_paginate()参数详细
    Thinkphp5 日期与时间戳相互转换
    dedecms后台一些时间等验证方法(plus/diy.php)
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11566633.html
Copyright © 2011-2022 走看看