字符串是以结束符(’\0’)结束的字符数组,其在创建时,**’\0’**会自动添加到结尾
int main()
{
char str[] = "12345";
char str1[] = { '1','2','3','4','5' };
cout << str << endl;//输出为12345
cout << str1 << endl;//输出12345....直到遇到结束符为止
}
-
sizeof()是运算符,而不是一个函数,其作用是:获得对象所占的字节数, 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,X86为4,X64为8);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。 -
strlen(…)是函数,要在运行时才能计算。 参数必须是字符型指针(char*), 且必须是以’\0’结尾的。
//例子1
int main()
{
char str[10] = "12345";
cout << sizeof(str) / sizeof(str[0]) << endl; //结果为10,不受存储内容的影响
cout << strlen(str) << endl;//结果为5,计算字符串的长度,直到遇到结束符'\0',且结束符不算进长度
}
//例子2
int main()
{
char str[10] = { 'a','b','\0','c','d' };
cout << sizeof(str) / sizeof(str[0]) << endl; //结果为10
cout << strlen(str)<<endl;//结果为2
}
//例子3
int main()
{
char*str = "12345";
char str1[] = "12345";
cout << sizeof(str) << endl; //参数为指针时返回指针所占的大小,x86输出为4,x64输出为8;
cout << sizeof(str1) << endl;//输出为6,参数为数组时返回数组所占的大小
cout << sizeof(str[0]) << endl;//输出为1
cout << strlen(str) << endl;//输出为5
}
//例子4
int main()
{
char str[] = "12345";
char str1[] = { '1','2','3','4','5' };
char str2[5] = "12345"; //数组界限溢出
char str2[6] = "12345";//正确
cout << sizeof(str) << endl; //输出6,因为编译时会在字符串末尾加上结束符‘\0'
cout << sizeof(str1) << endl; //输出5
}
数字0,结束符’\0’, 字符’0’区别:
在计算机中
char c1=0 —>0x00
char c2=’\0’ —>0x00
char c3=‘0’—>0x30
所以数字0和结束符’\0‘是一样的
参考:
strlen和sizeof的区别
字符数组和字符串的区别,C语言字符数组和字符串区别详解