• strlen与sizeof区别


    strlen与sizeof都可以用来计算相关字符指针和字符数组的长度,容易混淆。这里用实际例子对它们加以区分。

    总的来说:strlen是用来计算字符串的字符个数(不含'')的函数;而sizeof是用来计算类型或者变量的存储大小的操作符(而不是函数),因此sizeof的结果是在编译阶段就能确定的。

    题目:
    char *p1 = "12345678"; 
    char p2[] = "12345678";
    char p3[1024]="12345678"; 
    char p4[] = {'1','2','3','4','5','6','7','8'}; 
    sizeof(p1)=? 
    sizeof(p2)=? 
    sizeof(p3)=? 
    sizeof(p4)=? 
    strlen(p1)=? 
    strlen(p2)=? 
    strlen(p3)=?
    strlen(p4)=? 
    分析:

    p1是一个字符指针,指向了静态常量区的一个常量字符串,"12345678"。所以,sizeof(p1)=指针的长度=4;strlen(p1)=字符串"12345678"的长度(不含''),所以是8。 

    p2是一个字符数组,由静态常量区的"12345678"进行初始化。所以sizeof(p2)是计算数组p2的长度,所以结果为"12345678"的所有字符的长度(含''),所以是9。 strlen(p2)也是在计算"12345678"的长度(不含''),所以是8。
     
    p3是一个字符数组,由静态常量区的"12345678"进行初始化,但长度为1024。 所以,sizeof(p3)=1024;strlen(p3)为字符串"12345678"的长度(不含''),所以是8。 

    p4是一个字符数组,由字符'1','2','3','4','5','6','7','8'进行初始化, 这样初始化与"12345678"进行初始化的区别是 前者不包含''。因此,sizeof(p4)=8。由于p4作为一个字符数组,并不以''结尾, 所以strlen(p4)在计算字符串长度的时候,找不到结束符'',会发生字符串溢出。 

    所以,最后答案为:
    sizeof(p1)=4 
    sizeof(p2)=9 
    sizeof(p3)=1024 
    sizeof(p4)=8
    strlen(p1)=8
    strlen(p2)=8 
    strlen(p3)=8 
    strlen(p4)=字符串溢出,值不确定,甚至会引起程序崩溃

  • 相关阅读:
    1001. 害死人不偿命的(3n+1)猜想 (15)
    c语言学习习题
    设计模式随笔(四):单例模式
    设计模式随笔(三):建造者模式
    设计模式随笔(二):抽象工厂模式
    设计模式随笔(一):介绍java中常用的设计模式
    idea导入spring5.x源码编译
    使用idea从git上项目后jar包无法加载
    SFTP文件上传下载以及如何处理异常,页面展现
    Java代理模式
  • 原文地址:https://www.cnblogs.com/fengxing999/p/11150902.html
Copyright © 2020-2023  润新知