如果我sizeof("HELLO");
我得到6,这是预期的,但是如果我有:
void printLength(char *s) {
sizeof(s);
}
将“Hello”传递给此函数sizeof
时返回8.
为什么会这样?
答案 0 :(得分:6)
你得到的是char *
的大小。要获得实际长度,请使用strlen
。
答案 1 :(得分:4)
它不会改变。数组不是指针。 sizeof("HELLO")
为您提供char
数组{'H','E','L','L','O','\0'}
的大小,sizeof(s)
为您提供指针的大小。
答案 2 :(得分:3)
因为声明为固定大小的字符串文字和数组是专门处理的。编译器确切地知道它们有多大。
在你的函数中,所有编译器都知道它是指向某个东西的指针。你正在考虑字符指针的大小(在那一点上,是编译器所知道的)。你使用的是64位系统,所以你得到一个8字节的指针,无论你输入什么功能。
有一个库函数可以帮到你:
#include <string.h>
int getLength(char * str)
{
return strlen(str);
}