sizeof与strlen函数

本内容供复习参考用

sizeof

sizeof是用来查询当前变量在内存中所占字节数的一个运算符,可以对常见的变量进行字节计算,如下:

#include <stdio.h>
#include <string.h>
int main()
{
	int a ;
	float b;
	char c;
	double d;
	printf("sizeof=%d\n",sizeof (a));//4字节
	printf("sizeof=%d\n",sizeof (b));//4字节
	printf("sizeof=%d\n",sizeof (c));//1字节
	printf("sizeof=%d\n",sizeof (d));//8字节
	return 0 ;
 } 

请添加图片描述

strlen

strlen是用来查询字符串中含有字符的数量,从传递过来的地址开始计算,一直到 ‘/0’
请注意一个前提,字符串成立的条件是末尾必须有空字符也就是 ‘/0’

#include <stdio.h>
#include <string.h>
int main()
{	
	char arr[5] ="hello"; //占用满了,无位置存放空字符,不是字符串 
	char arrx[6] ="hello"; //hello'/0'  实际 
	char arrxx[7] = "hello"; //hello'/0'+随机数  实际 
	char an[] = "hello";//hello'/0'  实际  
	for(int i = 0;i<sizeof(arr);i++) //104101108108111
	printf("%d",arr[i]);
	printf("\n");
	for(int i = 0;i<sizeof(arrx);i++) //1041011081081110
	printf("%d",arrx[i]);
	printf("\n");
	for(int i = 0;i<sizeof(arrxx);i++) //10410110810811100
	printf("%d",arrxx[i]);
	printf("\n");
	for(int i = 0;i<sizeof(an);i++) //1041011081081110
	printf("%d",an[i]);
	printf("\n");
	return 0 ;
 } 

从上面的代码段验证中,可以得知,C语言在构造字符串时,会隐式的调用一个空字符补充到字符串结尾处。因此在使用strlen时,查询的字符串长度,就是从当前传入的地址,一直到空字符前。代码如下:

#include <stdio.h>
#include <string.h>
int main()
{	
	char arr[] ="hello"; // 实际存储为:h e l l o '/0' 
  
	printf("strlen==%d\n",strlen(arr)); //传入arr[0]
	//从arr[0]计数到空字符'/0'前 
	printf("strlen==%d\n",strlen(&arr[3])); //arr[3]
	printf("strlen==%d\n",strlen(&arr[sizeof(arr)-1])); //arr[5]
	//结果如下:5 2 0
	return 0 ;
 } 

从这个例子长得sizeof(arr)-1得到arr[5]也能说明上述构造字符串中仍然是隐式创建了一个空字符。

两者作用在字符串时的区别

#include <stdio.h>
#include <string.h>
int main()
{	
	char arr[6] ="hello"; // 实际存储为:h e l l o '/0' 
  
	printf("strlen==%d\n",strlen(arr));//5
	printf("sizeof==%d\n",sizeof(arr));//6
	
 } 

sizeof将对该变量所占用字节数进行输出,而strlen的功能则是计算从传入地址到空字符间的字符数量。

sizeof对其他变量进行计算

通常采用sizeof(主体)/sizeof(变量)来获得长度,如整型数组长度计算如下:

#include <stdio.h>
int main()
{	
    int arr[] ={1,2,3,54,65,7,9,5}; // 8wei 
	int len = sizeof(arr)/sizeof(int);
	printf("sizeofarr==%d\n",sizeof(arr));//32
	printf("sizeofint==%d\n",sizeof(int));//4
	printf("len==%d\n",len);//8
	return 0;
 } 
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值