如果我做sizeof("HELLO");
我得到6,预计,但是如果我有:
void printLength(char *s) {
sizeof(s);
}
当通过 “你好” 来对此功能sizeof
返回8.
这是为什么?
如果我做sizeof("HELLO");
我得到6,预计,但是如果我有:
void printLength(char *s) {
sizeof(s);
}
当通过 “你好” 来对此功能sizeof
返回8.
这是为什么?
因为声明为固定大小的字符串文字和数组会被专门处理。编译器确切知道它们有多大。
在你的功能,所有的编译器知道的是,它是一个指针的东西。你正在使用字符指针的大小(在这一点上,所有编译器都知道它的大小)。你使用的是64位系统,因此无论你输入什么函数,都会得到一个8字节的指针。
有一个库函数来为你做这个:
#include <string.h>
int getLength(char * str)
{
return strlen(str);
}
什么你得到是char *
大小。要得到它的实际长度,请使用strlen
。
它不会改变。数组不是指针。 sizeof("HELLO")
给出了char
数组{'H','E','L','L','O','\0'}
的大小,而sizeof(s)
给出了指针的大小。
因为8是'的sizeof(字符*)'您的系统上:数组衰变为指针。 – hmjd 2012-07-31 21:55:57