sizeof与strlen的区别
先看msdn的官方解释:
strlen——get the length of a string.
size_t strlen(const char *string);
Each ofthese functions returns the number of characters instring, notincluding the terminating null character.
//函数返回string里的字符数,不包括终止字符'\0'
sizeof
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or atype (including aggregate types). This keyword returns a value of type size_t.
//返回变量或类型(包括集合类型)存储空间的大小
When appliedto a structure type or variable,sizeof returns the actual size, whichmay include padding bytes inserted for alignment. When applied to a statically dimensioned array,sizeof returns the size of the entire array. The sizeofoperator cannot return the size of dynamically allocated arrays or externalarrays.
//应用结构体类型或变量的时候,sizeof()返回实际大小,包括为对齐而填充的字节。当应用到静态数组时,sizeof()返回整个数组的大小。sizeof()不会返回动态分配数组或扩展数组的大小。
sizeof与strlen有以下区别:
- sizeof是一个操作符,而strlen是库函数。
- sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为'\0'的字符串作参数。
- 编译器在编译时就计算出了sizeof的结果,而strlen必须在运行时才能计算出来。
- sizeof计算数据类型占内存的大小,strlen计算字符串实际长度。
练习
char str[]="hello";
char *p=str;
int n=10;
//请计算
sizeof(str);
sizeof(p);
sizeof(n);
void func(char str[100])
{
sizeof(str);
}
void *p=malloc(100);
sizeof(p);
答案
char str[]="hello";
char *p=str;
int n=10;
//请计算
sizeof(str);//6,5+1=6,1代表'\0'
sizeof(p);//4,代表指针
sizeof(n);//4,整形占据的存储空间
void func(char str[100])
{
sizeof(str);//4,此时str已经转换为指针了
}
void *p=malloc(100);
sizeof(p);//4,指针大小