回覆列表
  • 1 # 年輪978865

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

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

    void test6()

    {

    char s1[20] = "hello world";

    char s2[20] = {"h","e","l","l","0"," ","w","o","r","l","d","\0"};

    char s3[] = "hello\0 world";

    char s4[] = {"h","e","l","l","0","\0"," ","w","o","r","l","d","\0"}; printf("%d\t%d\t%d\t%d\n",strlen(s1),strlen(s2),strlen(s3),strlen(s4)); printf("%d\t%d\t%d\t%d\n",sizeof(s1),sizeof(s2),sizeof(s3),sizeof(s4));

    }

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

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

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

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

    這種區別與兩種求值方式的實現原理有關:

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

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

    由此可知,我們使用C語言計算字串的位元組數(字串的長度,因為一個字元佔一個位元組的儲存空間。)可使用函式。 Strlen()來實現。

  • 中秋節和大豐收的關聯?
  • 現在的年輕人都在做什麼型別工作呢?大家都滿意嗎?還是為了生活在湊活著?