C語言庫函式(侵刪)
阿新 • • 發佈:2018-11-09
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。說明:指標是一種普通的變數,從訪問上沒有什麼不同於其他變數的特性。其儲存的數值是個整型資料,和整型變數不同的是,這個整型資料指向的是一段記憶體地址。