一行代码实现strlen

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)的结果就是这个指针所占内存的大小,而不是整个数组所占内存的大小,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值