直接上代码
#include <iostream>
#include <string>
#include <cstring>
int main()
{
using namespace std;
char a[] = "abcdef";
char b[20] = "abcdef";
string s = "abcdefghijk";
cout<<strlen(a)<<endl;
cout<<sizeof(a)<<endl;
cout<<strlen(b)<<endl;
cout<<sizeof(b)<<endl;
cout<<sizeof(s)<<endl;
cout << s.length() << endl;
}
cout<<sizeof(s)<<endl; 输出的大小 跟编译器相关。如果有strlen(s)则会报错,因为strlen 的参数为const char *。从上面结果来看,还是sizeof 比 strlen 得出的结果要长,下面具体来看下差别
1 : sizeof 作用于对象与数据类型而strlen作用于const char *
2:sizeof 是运算符 strlen是函数
3:sizeof 是在编译时计算的大小,而strlen是在运行时计算的大小
4:sizeof 计算的是对象的实际大小,strlen 遇到第一个’\0’而返回
5:.数组做sizeof的参数不退化,传递给strlen就退化为指针
6:sizeof 操作符不能返回被动态分派的数组或外部数组的尺寸
extern char c[20]; 这样的是可以使用sizeof来测试外部数组的, extern char c[]; 这样的是不可以使用sizeof来测试外部数组的…后面有待进一部完善