zoukankan      html  css  js  c++  java
  • 字符串和字符数组长度

    int main()

     char a[] = "abcdefg";
     char *pstr = "abcdefg";
     char b[]={'a','b','c','d','e','f','g'};
     printf("sizeof(a)=%d,strlen(a)=%d ",sizeof(a),strlen(a));
     printf("sizeof(pstr)=%d,strlen(pstr)=%d ",sizeof(pstr),strlen(pstr));
     printf("sizeof(b)=%d,strlen(b)=%d ",sizeof(b),strlen(b));

    }

    打印结构如下所示

    sizeof(a)=8,strlen(a)=7
    sizeof(pstr)=4,strlen(pstr)=7
    sizeof(b)=7,strlen(b)=19
    结果说明:
      char a[]中的元素包括"abcdefg"以及一个'',pstr也是这样,因为他们都是一个字符串。
      所以sizeof(a)=8;
      strlen(a)=strlen(pstr)=7是因为strlen计算的是字符串中除结尾标志''外的所有字符;
      而strlen(b)=19是因为b不是一个正常“字符串”,字符串必须明确以''结尾,而cha b[]只是一个字符数组,当用strlen计算b的长度时,是将b当作一个字符串来进行计算长度,也就是说要遇到''才认为这个“字符串”结束;而b中未有定义元素'',所以strlen会沿着b结尾的内存地址一直计数下去,直到遇到''。所以用strlen(b),结果是不可预知的。
      理解了上一条,sizeof(b)=7也不难理解,b是一个字符数组,里面只有7个元素,再次强调,b中没有''。
      最后一条sizeof(pstr)=4,这个相信计算机的童鞋都能理解吧,32位机器上指针的大小=32bit=4byte。所以结果为4.
     
     
  • 相关阅读:
    Linux系统教程:设置GRUB菜单密码
    vimdiff的常用命令
    Zero-Copy实现原理
    解决业务代码里的分布式事务一致性问题
    用好这6个APP,学英语SO EASY!
    线程池调优
    理解select,poll,epoll实现分析
    时序图
    性能监控-TP理解
    sshd_config OpenSSH SSH 进程配置文件配置说明
  • 原文地址:https://www.cnblogs.com/ju-an/p/3305538.html
Copyright © 2011-2022 走看看