sizeof: 一般指类型、变量等占用的内存大小(由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小)
strlen: c字符串的长度(参数必须是字符型指针 char*,当数组名作为参数传入时,实际上数组就退化成指针了。该函数的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL( 或0x00),返回的长度大小不包括NULL)
1、sizeof的使用
sizeof(int); // 返回int类型在内存中占用的字节数4(x86)或8(x64)
int a = 2;
sizeof(a); // 返回int 变量在内存中占用的字节数4(x86)或8(x64)
const char *b = "abcd";
sizeof(b); // 返回char类型指针在内存中占用的字节数4(x86)或8(x64),指针占用的字节数大小和类型无关
char *parr = new char[10];
sizeof(parr); // 返回char类型指针在内存中占用的字节数4(x86)或8(x64),指针占用的字节数大小和类型无关
int func() {return 2;}
sizeof(func()); // 返回int类型在内存中占用的字节数4(x86)或8(x64)(即函数的返回值类型,不能为void)
2、strlen的使用
c字符串是否结束是以' '标志来判断的
const char *a = "abcd";
strlen(a); // 字符串长度为4
sizeof(a); // 在内存中占用的字节数4(x86)或8(x64)
char b[10] = "abc";
strlen(b); //字符串长度为 3
sizeof(b); // 在内存中占用的字节数10(x86)或20(x64)
const char *c ="a bc";
strlen(c); // 字符串长度为1
sizeof(c); // 在内存中占用的字节数5(x86)或10(x64)
char a[] = {};
在数组 a 中,a[i] = ' ' 与 a[i] = 0 效果一样。因为' '是预定义的符号常量,其值为0。' '常用于字符串结束标记,而0就是普通的即时常量,所以代码中给字符数组最后一位添加结束标记时写' '而不写0具有提示意义,便于阅读。
#incluce <iostream>
using namespace std;
int main()
{
char a[280];
for(i = 0; i < 280; i++)
{
a[i] = i + 1; // a[255] = 0
}
cout << strlen(a) << endl; // 255, char占8bit,当你存256的时候,写成二进制是1 0000 0000,因为char只有8个bit,所以1没有存进去,只存进了8个0,这时候strlen判断到这里就认为字符串结束了
}
备注:在c++中string字符串的长度可以使用其成员函数length()和size()
std::string str = "hello world"
str.size(); // str.length();