1、sizeof():返回所占总空间的字节数
(1)对于整型字符型数组
(2)对于整型或字符型指针
2、strlen():返回字符数组或字符串所占的字节数
(1)针对字符数组
(2)针对字符指针
sizeof():
运算符,编译时计算,参数:数组、指针、类型、对象、函数。
功能:获得保证能容纳所建立对象的最大对象字节数,不能返回动态分配内存空间大小。
strlen():
函数,运行时计算,参数:char *(字符型指针)
功能:返回字符串的实际长度,返回长度不包括'\0',即遇到'\0'就停止
str.length()、str.size():
功能:求string类对象的成员函数,字符串长度。
二者没有区别
char* ss1 = "abcdefhijk"; //ss1是指针,存储字符串首地址,指向字符串 //sizeof(ss1)=4或8 strlen(ss1)=10 sizeof(*ss1)=1 //ss1是指针,32位下占4个字节,64位下8个字节 *ss1是第一个char字符=1 strlen(ss1)表示实际长度=10 char ss2[] = "abcdefhijk"; //sizeof(ss2)=11 strlen(ss2)=10 sizeof(*ss2)=1 //sizeof(ss2)为11,ss是字符数组,计算到'\0'位置,因此是(10+1) 作为参数退化为指针,*ss2是第一个字符 char ss3[100] = "abcdefhijk"; //sizeof(ss3)=100 strlen(ss3) =10 sizeof(*ss3)=1 char a[] = { 'a','b','c' }; //sizeof(a)=3 strlen(a)=7 sizeof(*a)=1 char b[] = { "abc" }; // sizeof(b)=4 strlen(b)=3 sizeof(*b)=1 string str1 = { 'a','b','c','\0','X' }; //sizeof(str1)=32 sizeof(*str1)错误写法 //string类型无论有没有初始化,sizeof都为32(64位机下) string不是内置类型 char str2[]= { 'a','b','c','\0','X' }; //sizeof(str2)=5 strlen(str2)=3 //strlen在遇到'\0'时停止,=3 string str3 ; //sizeof(str3)=32 char s0[] ="\0"; //strlen(s0)=0 sizeof(s0)=2 //字符串里的'\0'是系统自动添加,而且不管原串里是否有'\0',故sizeof为2 char s1[] = { '\0' }; //strlen(s1)=0 sizeof(s1)=1 char s2[6]={'h','e','l','l','o','\0'} //字符串数组 char s3[6]="hello" //字符串数组,简化版写法 //以上两种完全相同,sizeof=6,strlen=5 char s4[5] = { 'h','e','l','l','o' }; //字符数组,因为没有'\0' //sizeof(s4)=5,strlen(s4)=5 char s5[10] = { 'h','e'}; //其余八个自动赋值'\0' //sizeof(s5)=10,strlen(s4)=2 char s[10]; s="abcd"; //以上两行写法错误,只能初始化时写成 char s[10]="abcd";