zoukankan      html  css  js  c++  java
  • 字符串长度函数strlen()

    如下是我的测试文件:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int main()
    5. {
    6. char str1[10] = "123456789";
    7. char str2[10] = "1234567890abcd";
    8. char str3[10] = "12345";
    9. char str4[10] = "12345 12";
    10. char str5[10] = {'1', '2', '3', '4', '\0', '5', '6'};
    11. int len1, len2, len3, len4, len5;
    12. len1 = strlen(str1);
    13. len2 = strlen(str2);
    14. len3 = strlen(str3);
    15. len4 = strlen(str4);
    16. len5 = strlen(str5);
    17. printf("str1--> %s, len-->%d\n", str1, len1);
    18. printf("str2--> %s, len-->%d\n", str2, len2);
    19. printf("str3--> %s, len-->%d\n", str3, len3);
    20. printf("str4--> %s, len-->%d\n", str4, len4);
    21. printf("str5--> %s, len-->%d\n", str5, len5);
    22. printf("====== Game Over ======\n");
    23. printf("\n");
    24. return 0;
    25. }
    如下是我的测试结果:
    1. str1--> 123456789, len-->9
    2. str2--> 1234567890123456789, len-->19
    3. str3--> 12345, len-->5
    4. str4--> 12345 12, len-->8
    5. str5--> 1234, len-->4
    6. ====== Game Over ======

    结果分析:
    根据 "man strlen"的结果,strlen()计算字符串s的长度,但不包括结尾字符'\0'。因此'\0'字符是表示一个字符串结尾的。那么在我的测试中:

    str1长度是很容易知道的。
    str2
    str2的长度为什么出错了呢?那是因为在分配存储单元的时候"abcd"字符在 str2 长度为10 的存储单元里存放不了了,而它又不能越界分配、存储,因此“abcd”是没有被分配存储单元的,同时 str2 的结尾字符'\0'也没有自动分配,而且str2
    是紧邻着 str1 进行分配的,在读取 str2 的时候没有碰到结尾字符 '\0',就会自动地读到 str1 里面的内容,这就形成了str2 截断了 "abcd"同时由接连读取了 str1 的内容,同strlen(str2)的结果是 str1 + str2总的长度。
    str3长度也容易理解。
    str4注意 str4中的空字符在'5' 和 '1'之间,它是空字符而不是结尾字符'\0',所以 str4 的长度也容易理解。
    str5 因为我显式地在字符串中增加了一个结尾字符'\0',那么在读取或者判断字符串长度的时候都会从第一个'\0'处结束,那么访问str5的时候会受到第一个 '\0' 的误导。








  • 相关阅读:
    DataList控件部分使用方法
    评教系统——设计的重要性
    2010.7——2011.7年度总结
    Javascript初步
    asp.net天轰穿视频学习总结
    Datatable中对某列求和,三种不同情况下的方法
    DataTable删除多行
    C#语言的结构体布局
    geoserver、openlayers、PostgreSQL 开发环境配置
    字节流和结构体的转换[转]
  • 原文地址:https://www.cnblogs.com/LinTeX9527/p/3999493.html
Copyright © 2011-2022 走看看