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";