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

  • 相关阅读:
    各种协议与HTTP协议之间的关系
    在浏览器中输入url地址到显示主页的过程
    TCP 协议如何保证可靠传输
    TCP,UDP 协议的区别
    TCP 三次握手和四次挥手
    OSI与TCP/IP各层的结构与功能,用到的协议
    424. 替换后的最长重复字符
    webstorm快捷键
    S1:动态方法调用:call & apply
    S1:原型继承
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11566633.html
Copyright © 2011-2022 走看看