在c语言中strlen是求字符串长度的函数,strlen在求长度的过程中寻找的是/0(字符长结束标志)
那么在不使用库函数下我们该如何实现呢
下面我们讲第一种方法,也是最常见的方法
首先我们创建一个char 类型的数组,数组的内容初始化成abc
然后写一个自己的函数这里的函数名可以自定义这里我写的是print
我们在传参的时候传的是数组,那么我们在接受的时候也可以写成数组的形式接收,还可以写成指针的方式接收, 因为数组在传参的时候传的是首元素的地址,所以这里写成指针的形式哦
当我们进入到print函数内部时 我们首先创建一个临时变量,叫count 也就是统计的
紧接着就是while循环,这时指针p指向的是数组的首元素,那么我们判断当指针p什么时候指向的元素是/0时 那么我们就停下循环,当指针每指向一个元素且不是/0时,那么我们就给我们的count++,然后指针p也++如此循环下去当指针p指向/0是我们的count里存放的数字也就是字符串的长度
int print(char* p)//第一种方法用函数来实现
{
int count = 0;
while (*p != '
int print(char* p)//第二种方法指针减指针
{
char* str = p;
char* end = p;
while (*end != 'int main()
{
char ch[]={'a','b','c'};
return 0;
}
')
{
end++;
}
return end - str;
}
int main()
{
int len = 0;
char ch[] = "bit" ;
len=print(ch);
printf("字符串的长度是%d\n", len);
return 0;
}
')
{
count++;
p++;
}
return count;
}
int main()
{
int len = 0;
char ch[] = "abc" ;
len=print(ch);
printf("字符串的长度是%d\n", len);
return 0;
}
第二种发法
指针-指针
我们说指针-指针的方法来实现时我们要先了解指向的类型对指针进行 *** 作时有什么影响
指针类型决定了指针进行解应用 *** 作的时候能够访问空间的大小。
int*p可以访问4个字节
short*可以访问2个字节
char*p可以访问1个字节
double*p可以访问8个字节
指针类型决定了:指针走一步走多远(指针的步长)
int*p;p+1 --> 4
char'p; p+1-->1
double* p; p+1-->8
这里我们进入print函数首先我们可以看到有两个char*类型的指针变量
是个方法的实现逻辑是,str指针指向数组的第一个元素,end指针指向数组的最后一个元素
然后相减得到的就是字符长的长度
分别是str 和 end 此时两个指针指向的都是p也就是数组的首元素的地址
进入while循环当end指针指向的元素不是/0是我们就++如果是/0那么此时end指针指向的位置就是数组的最后一个元素所在的位置,并且跳出循环,在直接返回得到的就是字符串的长度
int main()
{
char ch[]="abc";
return 0;
}
以上就是我对这两种方法的看法,欢迎大神补充,当然还有一种递归的方法就放到下次在讲吧
这里要注意一下,我们在初始值数组的时候不要写成以下这种形式
如果这样写的话就不能正常的求字符长的长度
因为这样子初始化的话,我们知道strlen在求字符串长度的时候找的是/0如果这样初始化那么在我们从受元素向后找的时候就会发现找不到/o,就会在内存中一直向后找。此时得到值不是字符串的长度而是随机值
如果写成整个方式的话,用双引号括起来的字符串我们叫常量字符串,一般/0都会自动隐藏在字符串的最后面,此时这个数组在内存中存储的东西是 a,b.c./0
因为/0默认是隐藏不显示的,而上面的写法里面就没有/0那也就是为什么上面那种方式最后求出来的结果是随机值的原因
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)