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

  • 相关阅读:
    解决Oracle XE报错ORA-12516(oracle回话数超出限制)
    端口被占用如何处理
    ORACLE initialization or shutdown in progress 错误解决办法
    oracle的闪回功能
    Linux入门
    oracle字段like多个条件
    navicat常用快捷键与SQL基本使用
    Oracle四舍五入,向上取整,向下取整
    无限循环小数化分数
    筛选素数
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11566633.html
Copyright © 2011-2022 走看看