2013-08-30 65 views
0

我想獲取一個字符串的長度,但我得到了錯誤的值,它說它只有4個字符長。爲什麼是這樣?我是否正確使用sizeof()錯誤的字符串長度

#include <stdio.h> 

int main(void) 
{ 
    char *s; 
    int len; 

    s = "hello world"; 
    len = sizeof(s); 
    printf("%d\n", len); 
} 

回答

6

sizeof運算符正在返回指針的大小。如果你想要一個字符串的長度,使用strlen函數。

即使您有一個數組(例如char s[] = "hello world"),sizeof運算符也會返回錯誤的值,因爲它會返回包含字符串終止符字符的數組長度。

噢,作爲一個方面說明,如果你想要一個字符串指針指向文字字符串,你應該聲明它爲const char *,因爲字符串文字是常量並且不能被修改。

+0

謝謝你告訴我關於'strlen' –

1

您已聲明s作爲指針。當應用於指針時,sizeof()返回指針的大小,而不是指向的元素的大小。在你的系統上,指向char的指針的大小恰好是四個字節。所以你會看到4作爲你的輸出。

0

除了strlen(),您還可以將字符串文字分配給字符數組 char s[] = "hello world",在這種情況下,sizeof()返回數組的字節大小。在這個特殊情況下,在字符串的末尾添加一個字符\ 0。

sizeof()的運行時複雜度爲O(1)。

strlen()的複雜性是O(n)。