int strlen(const char* s)
{
return assert(s),*s?strlen(s+1)+1:0;
}
strlen从内存的某个位置开始,知道碰到字符串结束符 ‘\0’为止
头文件:string.h
功能:计算给定字符串的长度,不包括’\0’在内
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止
char aa[10];cout<<strlen(aa)<<endl; //结果是不定的
char aa[10]={'\0'}; cout<<strlen(aa)<<endl; //结果为0
char aa[10]="jun"; cout<<strlen(aa)<<endl; //结果为3
而sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个取字节运算符,strlen是函数。
sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。
char ss[] = “0123456789”;
sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1
sizeof(*ss) 结果 1 ===》*ss 是第一个字符
int ss[100] = “0123456789”;
sizeof(ss) 结果 400 ===》ss表示在内存中的大小 100×4
strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以’\0’结尾的
char q[]=”abc”;
char p[]=”a\n”;
sizeof(q),sizeof(p),strlen(q),strlen(p);
结果是 4 3 3 2
int Dim(int array[])
{
return sizeof(array)/sizeof(*array);
}
程序运行后,值为1, 原因要结合函数调用时实参传递到形参的方式了,这里实参传递到形参后,形参实际上就只是一个指向实参数组的指针,所以函数中sizeof(array)的结果就是这个指针所占内存的大小,而不是整个数组所占内存的大小,