错误的字符串长度

时间:2013-08-30 05:01:26

标签: c string sizeof string-length

我正在尝试获取字符串的长度,但我得到了错误的值,它说它只有4个字符长。为什么是这样?我正确使用sizeof()吗?

#include <stdio.h>

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

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

3 个答案:

答案 0 :(得分:6)

sizeof运算符返回指针的大小。如果您想要字符串的长度,请使用strlen函数。

即使你有一个数组(例如char s[] = "hello world"),sizeof运算符也会返回错误的值,因为它会返回包含字符串终结符字符的数组的长度。

哦,作为旁注,如果你想要一个字符串指针指向文字字符串,你应该声明它const char *,因为字符串文字是不变的,不能被修改。

答案 1 :(得分:1)

您已将s声明为指针。当应用于指针时,sizeof()返回指针的大小,而不是指向的元素的大小。在您的系统上,指向char的指针的大小恰好是四个字节。所以你会看到4作为你的输出。

答案 2 :(得分:0)

除了strlen()之外,您还可以将字符串文字分配给字符数组 char s[] = "hello world",在这种情况下,sizeof()以字节为单位返回数组的大小。在这个特殊情况12中,字符串末尾的\ 0字符有一个额外字节。

sizeof()的运行时复杂度为O(1)。

strlen()的复杂性是O(n)。