年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3778|回复: 1

sizeof()函数与strlen()函数计算字符串长度的区别

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-3-4 15:20:07 | 显示全部楼层 |阅读模式
    源代码:
    1. /*
    2. 1、sizeof()函数取的是该数据所占内存空间的大小;
    3. 2、sizeof()对字符串长度进行计算时,取的是字符串字符数加1(\0也算一个);
    4. 3、strlen()函数也是计算的是字符串的长度,但以\0做为计算结束符,因此正常情况下为字符串内字符的个数;
    5. 4、如果字符串内包含"\0",sizeof()会将该字符算入所占空间数,strlen()则计算至此为止;
    6. 5、一般情况下,sizeof()所计算出来的长度比strlen()计算出来的长度数要大1;
    7. 6、如果字符串中包含"\0",strlen()计算则会出现错误;
    8. 7、32位编译器中中文占2个字节,64位编译器中中文占3个字节;
    9. */
    10. #include <stdio.h>
    11. #include <stdlib.h>
    12. #include <string.h>
    13. int main() {
    14.    
    15.     char str[] = "123abc";  // 定义正常字符串"123456";
    16.    
    17.     int length = strlen(str);  // 计算字符串长度;
    18.    
    19.     int size = sizeof(str);   // 计算字符串所占字节数;
    20.    
    21.     printf("%s:\n", str);  //输出字符串; 由于字符串中带"\0",后续的输出被中断,同样的道理如果字符串尾端没有带0,则会继续输出到下一个''\0"为止;
    22.    
    23.     printf("strlen = %d\n", length);  //输出字符串长度;
    24.    
    25.     printf("sizeof = %d\n", size);  // 输出字符串所占字节数
    复制代码
    输出结果:
    1. 123abc:
    2. strlen = 6
    3. sizeof = 7
    4. 123:
    5. strlen = 3
    6. sizeof = 8
    复制代码
    PS:字符串中"\0"是非常重要且敏感的,所以不要忽略或多加,切记!!

  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-4 15:26:07 | 显示全部楼层
    举一个简单的例子:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main() {
    4.    
    5.     char str[] = "123456";  // 定义正常字符串"123456";
    6.    
    7.     str[3] = '\0';  // 将第4个字符改成"\0",观察其输出结果
    8.    
    9.     printf("%s\n", str);  //输出字符串;
    10.    
    11.     system("pause");  // 系统暂停;
    12.    
    13.     }
    复制代码
    输出的结果为:
    1. 123
    复制代码



    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-5-4 13:12 , Processed in 0.046514 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表