错误的字符串长度
我试图得到一个字符串的长度,但我得到错误的值,它说它只有4个字符长。 为什么是这样? 我正确使用sizeof()
吗?
#include 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)。