Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

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那也就是为什么上面那种方式最后求出来的结果是随机值的原因

[+++]

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 5, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

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那也就是为什么上面那种方式最后求出来的结果是随机值的原因

[+++]

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
c语言strlen的模拟实现_C_内存溢出

c语言strlen的模拟实现

c语言strlen的模拟实现,第1张

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那也就是为什么上面那种方式最后求出来的结果是随机值的原因

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/791371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存