0

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

#include <stdio.h>

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

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

3 回答 3

6

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

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

哦,顺便说一句,如果你想要一个字符串指针指向文字字符串,你应该声明它const char *,因为字符串文字是常量并且不能被修改。

于 2013-08-30T05:02:52.827 回答
1

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

于 2013-08-30T05:03:12.593 回答
0

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

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

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

于 2013-08-30T05:31:05.647 回答