字符串長度函數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' 的誤導。









免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM