字符数组中sizeof与strlen的区别

sizeof以字节形式给出了其操作数的存储大小

        short char的大小为1字节sizeof(char)的输出值为1

        int 的大小为4字节sizeof(int)的输出值为4

对于char大小都为1字节的变量 易混淆sizeof和stlen

        未指定数组大小时,如:char arr1[ ]

补\0的情况

        1.未指定数组大小时char arr1[ ]="abcd";以双引号内的字符串会在最后加\0

        2.指定数组大小时char arr2[5] = "abc";未补满的将用\0补满

 

 3指定数组大小时char arr5[5] = { 'a','b','c'};未补满的将用\0补满

 

 不补\0的情况

1.char arr4[ ]={'a','b','c'};大括号内的字符则不会在最后补\0

 2数组已满也不补\0

对于char大小都为1字节的变量 易混淆sizeof和stlen

sizeof(arr)会统计变量元素的大小(元素包括\0)

strlen统计字符长度(不包括\0)

并且srtlen在遇到\0会停止检索字符

如果字符串中没有\0,且不补\0,则会返回随机值

#include<stdio.h>
#include<string.h>
//字符数组中sizeof与strlen的区别
int main()

{//[]中有数字,不满元素的用\0补满
 //[]没数字的,"xxx"中在最后补\0;{'x','x'}不补\0

	char arr1[] = "abcd";//有\0
	char arr2[5] = "abc";//有\0\0
	char arr3[5] = "abcde";//无\0
	char arr4[] = { 'a','b','c' };//无\0
	char arr5[5] = { 'a','b','c'};//有\0\0
	char arr6[5] = { 'a','b','c','d','e'};//无\0



	printf("%zd\n", sizeof(arr1));//5   //后面为输出值(下同)
	printf("%zd\n", sizeof(arr2));//5
	printf("%zd\n", sizeof(arr3));//5
	printf("%zd\n", sizeof(arr4));//3
	printf("%zd\n", sizeof(arr5));//5
	printf("%zd\n", sizeof(arr6));//5
	printf("%d\n", strlen(arr1));//4
	printf("%d\n", strlen(arr2));//3
	printf("%d\n", strlen(arr3));//随机
	printf("%d\n", strlen(arr4));//随机
	printf("%d\n", strlen(arr5));//3
	printf("%d\n", strlen(arr6));//随机


	return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值