strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'/0'为止,然后返回计数器值。
函数原型:extern unsigned int strlen(const char *s);
头文件:string.h
与sizeof()的区别:
strlen(char *)函数求的是字符串的实际长度,它求得方法是从字符串首地址开始扫描直到遇到'/0',如果只定义了一个字符串而没有给它赋值,对其求strlen的结果是不确定的。
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不是函数,它是一个操作符。
区别可以总结为:
1.sizeof是操作符,strlen是函数
2.sizeof可以用类型做参数,strlen只能用char *做参数,且必须以'/0'结尾
3.一般情 况下,sizeof在编译阶段就计算过了,而strlen的值是在运行时才确定的。
举例:
main(){
char * s="123";
char ss[]="123";
char sss[10]="123";
printf("/n%d ",strlen(s));//3
printf("%d ",strlen(ss));//3
printf("%d ",strlen(sss));//3
printf("%d ",sizeof(s));//2
printf("%d ",sizeof(ss));//4
printf("%d ",sizeof(sss));//10
}
class X
{
int i;
int j;
char k;
};
X x;
cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐
cout<<sizeof(x)<<endl; 结果 12 同上
自定义函数实现strlen()函数的功能 下面几种实现strlen函数的源代码大家参考
-------------------------------------------------1:start------------------------------------
#include <stdio.h>
#include <assert.h>
typedef unsigned int u_int;
u_int Mystrlen(const char *str)
{
u_int i;
assert(str != NULL);
for (i = 0; str[i]!= '/0'; i++);
return i;
}
------------------------------------------------1:end--------------------------------------
-------------------------------------------------2:start--------------------------------------
int strlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '/0')
len++;
return len;
}
------------------------------------------------2:end ------------------------------------------
------------------------------------------------3:start------------------------------------------
int strlen(const char *str)
{
assert(str);
const char *p = str;
while(*p++!=NULL);
return p - str - 1;
}
-------------------------------------------------3:end-----------------------------------------
-------------------------------------------------4:start----------------------------------------
int strlen(const char *str)
{
assert(str);
if (*str==NULL)
return 0;
else
return (1 + strlen(++str));
}
-----------------------------------------------4:end----------------------------------------
以上各种实现的方式都是大同小异的,有的用的是变量,有的用的是指针。
其中,最后一个用的是递归的方式。其实,在实现库函数的时候,是规定不可以
调用其他的库函数的,这里只是给大家一个方法,不用变量就可以实现strlen。
本文详细对比了C语言中strlen函数和sizeof操作符的功能与使用场景。strlen用于计算字符串实际长度,从首地址开始扫描直至遇到'/0'字符;而sizeof则获取变量声明后的内存占用大小。文中还提供了几种实现strlen功能的自定义函数示例。
2499

被折叠的 条评论
为什么被折叠?



