我想獲取一個字符串的長度,但我得到了錯誤的值,它說它只有4個字符長。爲什麼是這樣?我是否正確使用sizeof()
?錯誤的字符串長度
#include <stdio.h>
int main(void)
{
char *s;
int len;
s = "hello world";
len = sizeof(s);
printf("%d\n", len);
}
我想獲取一個字符串的長度,但我得到了錯誤的值,它說它只有4個字符長。爲什麼是這樣?我是否正確使用sizeof()
?錯誤的字符串長度
#include <stdio.h>
int main(void)
{
char *s;
int len;
s = "hello world";
len = sizeof(s);
printf("%d\n", len);
}
sizeof
運算符正在返回指針的大小。如果你想要一個字符串的長度,使用strlen
函數。
即使您有一個數組(例如char s[] = "hello world"
),sizeof
運算符也會返回錯誤的值,因爲它會返回包含字符串終止符字符的數組長度。
噢,作爲一個方面說明,如果你想要一個字符串指針指向文字字符串,你應該聲明它爲const char *
,因爲字符串文字是常量並且不能被修改。
您已聲明s
作爲指針。當應用於指針時,sizeof()
返回指針的大小,而不是指向的元素的大小。在你的系統上,指向char
的指針的大小恰好是四個字節。所以你會看到4作爲你的輸出。
除了strlen(),您還可以將字符串文字分配給字符數組 char s[] = "hello world"
,在這種情況下,sizeof()返回數組的字節大小。在這個特殊情況下,在字符串的末尾添加一個字符\ 0。
sizeof()的運行時複雜度爲O(1)。
strlen()的複雜性是O(n)。
謝謝你告訴我關於'strlen' –