c语言求字符串的长度(strlen)

    说到字符串这个老铁啊,它有一个明显的特征,就是以‘\0’结尾。那么如果要求它的长度,就可以利用这个特性。
    下面贴出它的代码实现:(此处代码可正确运行,但是并不是最终结果哦,最终结果后面给出)
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
size_t My_Strlen(const char* str)//size_t在底层也是一个Typedef实现的哦
{
	int size = 0;
	while (str[size] != '\0')
	{
		size++;
	}
	return size;
}
int main()
{
	char* str = "abc";
	int ret=My_Strlen(str);
	printf("%d\n",ret);
	system("pause");
	return 0;
}

但是如果代码仅仅到此就结束,那你就错啦,试想如果把main函数中的“abc”换
成NULL。会出现什么情况。这里小编已经尝试过了。
------》然后程序就崩溃了,如果各位小伙伴们想尝试一下的话,也可以哦。
重点来了!!!!
那我们应该怎么办呢?
其实有两种解决途径:
1、从调用者的角度
2、从程序设计者的角度
下面给出完整代码:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
size_t My_Strlen(const char* str)
{
方法1://if (str == NULL)//从设计者的角度
//{
	//return 0;
//}
方法2:assert(str!=NULL);//那么什么时候用方法1什么时候用方法2呢

	int size = 0;
	while (str[size] != '\0')
	{
		size++;
	}
	return size;
}
int main()
{
	char str[] = "heheh";
	char* p = str;
	int ret = 0;
	if (p != NULL);//从调用者的角度
	{
		 ret = My_Strlen(str);
		 printf("%d\n", ret);
	}
	system("pause");
	return 0;
}

关于什么时候用方法1什么时候用方法2的问题?
assert:叫断言,如果assert()括号中的为真,则执行程序。如果为假,则程序直接崩溃。
拿生活中的例子来说,如果是值得原谅的错误的话,就用方法1,如果错误很严重的话,就用断言的方法。比如说,服务器的开发,服务器开发有个特性就是每时每刻不间断,那么如果此时用了断言的话,程序直接崩掉,那服务器就没有办法使用了,但是如果是银行系统,那么是不能容忍出现一点小错误的 就用断言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值