使用strlen函数的常见错误

前言
1 头文件包含:#include <string.h>
2 函数原型: size_t strlen(const char *s);
3 功能:指定计算字符串s的长度,不包含字符串结束符’\0’
4 参数: s:字符串首地址
5 返回值: 字符串s的长度,size_t为unsigned int 类型

  1. 易错代码一
#include <stdio.h>
#include <string.h>
int main()
{

    char str[]="abc\0defg";
    int n = strlen(str);      //n = 3
    printf("n = %u\n",n);
	return 0;

程序运行结果
在这里插入图片描述
结果分析
不懂strlen函数的人会误以为会输出:n = 8。
由于strlen函数内部是使用循环来计算字符串的长度的,而循环结束的条件就是遇到字符串的结束符’\0’。所以在字符串中插入’\0’后,输出字符串的长度会以第一个’\0’前面的字符个数为准。

  1. 易错代码二
#include <stdio.h>
#include <string.h>

int main(void)
{
	char arr[] = {'a','b','c','d'};
	printf("%u\n",strlen(arr));
	return 0;
}

程序运行结果
在这里插入图片描述
结果分析:
输出的字符串的长度是6,但这个6是一个随机值。因为strlen函数是计算字符串的长度的,而char arr[] = {‘a’,‘b’,‘c’,‘d’}是一个字符数组,它与字符串区别在于它没有’\0’;所以strlen函数会从字符a的地址开始循环累加字符串的长度直至遇到’\0’,这个结果值是随机的,因为你不知道字符数组后面的元素是什么。

  1. 易错代码三
#include <stdio.h>
#include <string.h>

int main(void)
{
	char arr[5] = {'a','b','c','d'};
	printf("%u\n",strlen(arr));
	return 0;
}

程序运行结果
在这里插入图片描述
结果分析:
这题和上题差不多,只是人为的规定了数组元素的个数为。故在定义数组时进行了部分初始化,部分初始化时,没有被赋值的元素系统自动赋值为0,所以数组中的arr[4]的值就是’\0’。这样数组里面存放的就是一个字符串。

4 易错代码四

#include <stdio.h>
#include <string.h>

int main()
{
	if(strlen("abc") - strlen("abcdef") > 0)
	{
		printf("hehe\n");
	}
	else
	{
		printf("haha\n");
	}
	return 0;
}

程序运行结果
在这里插入图片描述

结果分析
程序输出:hehe,代表了strlen(“abc”)-strlen(“abcdef”)>0的结果为真。原因是strlen的返回值是无符号类型,两个无符号数相减还是无符号数,无符号数是不存在负数的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁽⁽ଘ晴空万里ଓ⁾⁾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值