区别一:
sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
strlen是函数,sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
eg:
char *s = ”asasas“;
sizeof(char) == 1
strlen(s) == 6
区别二:
sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
strlen返回字符串的长度,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
eg:
char s [] = {'1','2','3','4','5'};
sizeof(s) == 6 sizeof计算的是s数组的实际内存大小,s由1-5和‘/0’组成。sizeof不管内容,只管这个数组占用的空间
strlen(s) == 5 strlen只算字符串的长度,且不包含‘/0’
char str[20]="0123456789";
strlen(str) == 10;
sizeof(str) == 20;
注:
数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
如:
fun(char [8])
fun(char [])
都等价于 fun(char *)
在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小, 需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsiged char *p1, int len)
{
unsigned char* buf = new unsigned char[len+1]
memcpy(buf, p1, len);
}