size_t strlen(char const* str);
也正因為 strlen 是一個函數,所以需要進行一次函數呼叫,呼叫範例如下面的程式碼所示:char sArr[] = "ILOVEC"; /*用strlen()求長度*/ printf("sArr的長度=%dn", strlen(sArr));很顯然,上面範例程式碼的執行結果為 6(因為不包括結束字元 null)。這裡需要特別注意的是,函數 strlen 返回的是一個型別為 size_t 的值,從而有可能讓程式導致意想不到的結果,如下面的範例程式碼所示:
/*判斷一*/ if(strlen(x)>= strlen(y)) { } /*判斷二*/ if(strlen(x)- strlen(y)>= 0) { }從表面上看,上面的兩個判斷表示式完全相等,但實際情況並非如此。其中,判斷表示式一沒什麼問題,程式也能夠完全按照預想的那樣工作;但判斷表示式二的結果就不一樣了,它將永遠是真,這是為什麼呢?
/*判斷一*/ if(strlen(x)>= 5) { } /*判斷二*/ if(strlen(x)- 5>=0) { }很顯然,判斷表示式二的結果還是永遠是真,其原因與上面相同。
char sArr[] = "ILOVEC"; /*用sizeof求長度*/ printf("sArr的長度=%dn", sizeof(sArr));相對於函數 strlen,這裡的範例程式碼執行結果為 7(因為它包括結束字元 null)。同時,對 sizeof 而言,因為緩衝區已經用已知字串進行了初始化,其長度是固定的,所以 sizeof 在編譯時計算緩衝區的長度。也正是由於在編譯時計算,因此 sizeof 不能用來返回動態分配的記憶體空間的大小。