1. 程式人生 > >C語言庫函式(侵刪)

C語言庫函式(侵刪)

1.strlen

標頭檔案:#include <string.h>
strlen()函式用來計算字串的長度,其原型為:unsigned int strlen (char *s);  s為指定的字串

#include<stdio.h>
#include<string.h>
int main()
{
    char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/";
    char str2[100] = "http://see.xidian.edu.cn/cpp/u/shipin_liming/";
    char str3[5] = "12345";
    printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1));
    printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2));
    printf("strlen(str3)=%d, sizeof(str3)=%d\n", strlen(str3), sizeof(str3));
    return 0;
}

執行結果:
strlen(str1)=38, sizeof(str1)=4
strlen(str1)=45, sizeof(str1)=100
strlen(str1)=53, sizeof(str1)=5

如果字元的個數等於字元陣列的大小,那麼strlen()的返回值就無法確定了,例如
    char str[6] = "abcxyz";
strlen(str)的返回值將是不確定的。因為str的結尾不是0,strlen()會繼續向後檢索,直到遇到'\0',而這些區域的內容是不確定的。 

sizeof和strlen有以下區別:

sizeof是一個操作符,strlen是庫函式。 sizeof的引數可以是資料的型別,也可以是變數,而strlen只能以結尾為‘\0‘的字串作引數。 編譯器在編譯時就計算出了sizeof的結果。而strlen函式必須在執行時才能計算出來。並且sizeof計算的是資料型別佔記憶體的大小,而strlen計算的是字串實際的長度。 陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了。注意:有些是操作符看起來像是函式,而有些函式名看起來又像操作符,這類容易混淆的名稱一定要加以區分,否則遇到陣列名這類特殊資料型別作引數時就很容易出錯。最容易混淆為函式的操作符就是sizeof。說明:指標是一種普通的變數,從訪問上沒有什麼不同於其他變數的特性。其儲存的數值是個整型資料,和整型變數不同的是,這個整型資料指向的是一段記憶體地址。