C語言字符串長度

轉自:http://blog.csdn.net/kstrwind/article/details/8036555

/*sddfasdfasdfweimoyaozhuanni轉了個球地*/

C語言字符串長度的計算是編程時常用到的,也是求職時必考的一項。

C語言本身不限制字符串的長度,因而程序必須掃描完整個字符串後才能確定字符串的長度。

在程序裏,一般會用strlen()函數或sizeof來獲取一個字符串的長度,但這2種方法獲取的字符串的長度其實是不一樣,我們用如下函數進行測試:

 

  1. void test6()  
  2. {  
  3.      char s1[20] = "hello world";  
  4.      char s2[20] = {'h','e','l','l','0',' ','w','o','r','l','d','\0'};  
  5.      char s3[] = "hello\0 world";  
  6.      char s4[] = {'h','e','l','l','0','\0',' ','w','o','r','l','d','\0'};     
  7.   
  8.      printf("%d\t%d\t%d\t%d\n",strlen(s1),strlen(s2),strlen(s3),strlen(s4));  
  9.      printf("%d\t%d\t%d\t%d\n",sizeof(s1),sizeof(s2),sizeof(s3),sizeof(s4));  
  10.   
  11. }  


注意,該函數裏面定義了4個字符串,基本數據都是“hello world",但需要注意的是,字符串s1和s2給定了字符串數組的大小爲20,然後使用2種方式進行賦值;字符串s3和s4是s1和s2對比的字符串,區別就是s3和s4字符串中間插入了一個'\0'。該函數運行的結果如下:


從運行結果可以看出,strlen()函數和sizeof求字符串長度需要注意下面幾點:

1. strlen函數求得的字符串長度是從字符串第一個元素到第一個'\0'之間元素的個數(如果字符串中間有'\0',則結果不是整個字符串的長度),同時不包括該'\0'

所以:如果malloc的時候且用strlen求的字符串長度的話,需要+1;

2. sizeof求得的結果是存儲該字符串的變量佔用的空間大小,因而一定會包括'\0'.若'\0'後還有空餘的空間,也會包含到結果裏面

解釋(與2種求值方式的實現原理有關):

1. strlen()的一種實現就是遍歷字符串,遇到'\0'就終止,因而返回的結果是第一個'\0'前字符元素的個數

2. sizeof 常用來求變量佔用內存空間的大小,因而它返回的是存儲字符串的變量所佔用的內存空間大小,用來求字符串的長度,只在特定情況下可行,即字符數組剛好被一個字符串佔滿。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章