我正在尝试获取字符串的长度,但我得到了错误的值,也就是说它只有 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(),您还可以将字符串文字分配给 chars 数组
char s[] = "hello world"
,在这种情况下 sizeof() 返回数组的大小(以字节为单位)。在这种特殊情况 12 中,字符串末尾的 \0 字符多了一个字节。
sizeof() 的运行时复杂度为 O(1)。
strlen() 的复杂度是 O(n)。