strlen函数求字符串长度和字符数组长度(0,’0‘,“0”,‘\0‘的区别)

/*
	2022.06.02
	目的:
		strlen函数求字符串长度和字符数组的长度
	理论:
		1.计算字符串的库函数;
		2.strlen函数遇见空字符’\0’时就立即结束返回;
		3.ASCII的值是'0'表示空字符,即'\0';
	功能:
		
*/

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

int main(void)
{
	char cCh1 = 0x00; /* 16进制0x00翻译字符为’\0’*/
	char cCh2 = '\0'; /* \0 的ASCII码值是0,表示一个字符串结束的标志空字符,表示的是转义字符 */
	char cCh3 = '0';  /* 字符0的ASCII码值是48,不是空字符 */
	int iInt4 = 0;    /* 整数0,ASCII码的值是0,字符表示空字符 */
	
	char* str1 = "abc";   /* 系统自动默认会在后面给字符串加上空字符\0,是将其当成了一个整体,相当于字符串为“abc\0” */
	char* str2 = "ab\0c"; /* 因为中间有\0,所以提前结束了计数 */
	char* str3 = "ab\\0c";/* 第二个斜杠被第一个斜杠转义,“\\0”表示的“\\”和“0”两个字符 */
	char* str4 = "abc0d"; /* 字符串中的0代表的是字符0,而不是数字0 */
	char* str5 = "0";     /* 这个表示的是字符串,由'0'和'\0'两个字符组成 */

	char arry1[5] = {'1','2','3','4','5'};  /* 这是一个字符数组,他里面存放的并不是字符串(无‘\0’),只是一系列字符,因为该数组中没有遇到空字符,所以会一直寻找,直到找到空字符,所以才会有随机长度 */
	char arry2[5] = {'1','2','3','4','\0'}; /* 因为第五个元素是‘\0’*/
	char arry3[5] = {'1','2','3','4',0};    /* 因为数字‘0’等价于‘\0’*/
	char arry4[5] = {'0','0','0'};          /* 因为该数组是部分初始化,所以除了前三个元素是字符‘0’外面,其余都是自动填充的数字‘0’,数字‘0’等价于‘\0’,所以计数结束于第四个元素*/
	char arry5[5] = {'1','2','3','4','0x00'}; /* 一个16进制的字符是用4位二进制来表示的,1个字节是8位,那么4位就是半个字节,所以16进制的字符是半个字节大小 */
	char arry6[5] = { '1','2','3','4',0x00};  /* 因为16进制的‘0x00’翻译字符是‘\0’*/

	printf("Line = %d, ASCII = %d\n", __LINE__, cCh1); 
	printf("Line = %d, ASCII = %d\n", __LINE__, cCh2);
	printf("Line = %d, ASCII = %d\n", __LINE__, cCh3);
	printf("Line = %d, ASCII = %d\n", __LINE__, iInt4);

	printf("Line = %d, strlen(str1) = %d\n", __LINE__, strlen(str1)); 
	printf("Line = %d, strlen(str2) = %d\n", __LINE__, strlen(str2));
	printf("Line = %d, strlen(str3) = %d\n", __LINE__, strlen(str3));
	printf("Line = %d, strlen(str4) = %d\n", __LINE__, strlen(str4));
	printf("Line = %d, strlen(str5) = %d\n", __LINE__, strlen(str5));

	printf("Line = %d, strlen(arry1) = %d\n", __LINE__, strlen(arry1));
	printf("Line = %d, strlen(arry2) = %d\n", __LINE__, strlen(arry2));
	printf("Line = %d, strlen(arry3) = %d\n", __LINE__, strlen(arry3));
	printf("Line = %d, strlen(arry4) = %d\n", __LINE__, strlen(arry4));
	printf("Line = %d, strlen(arry5) = %d\n", __LINE__, strlen(arry5));
	printf("Line = %d, strlen(arry6) = %d\n", __LINE__, strlen(arry6));


	return 0;
}

/*
	程序运行结果:

	Line = 21, ASCII = 0
	Line = 22, ASCII = 0
	Line = 23, ASCII = 48
	Line = 24, ASCII = 0

	Line = 29, strlen(str1) = 3
	Line = 30, strlen(str2) = 2
	Line = 32, strlen(str3) = 5
	Line = 34, strlen(str4) = 5

	Line = 38, strlen(arry1) = 19
	Line = 40, strlen(arry1) = 4
	Line = 42, strlen(arry3) = 4
	Line = 44, strlen(arry4) = 3
	Line = 45, strlen(str5) = 1
	Line = 46, strlen(arry2) = 4
	Line = 47, strlen(arry3) = 4
	Line = 48, strlen(arry4) = 3
	Line = 49, strlen(arry5) = 19
    Line = 50, strlen(arry6) = 4
*/

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

軒邈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值