C++-sizeof()与strlen()的区别

本文深入探讨了C语言中字符串处理的关键概念,包括sizeof()与strlen()的区别和使用方法。通过示例说明了如何计算字符串的长度及字符数组的大小,并解析了不同情况下这些函数的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. sizeof()计算参数所占用的内存的单元数(字节数,一个字节8位,char型正好是一个字节),那么sizeof(a)=5;sizeof(*a)=1;另外sizeof("abc")=4(不是3)我想这个很容易明白。

2. strlen(const char *),此函数在msdn里面的解释:returns the number of characters in string, excluding the terminal NULL. No return value is reserved to indicate an error。如果直接翻译,其实我测试的结果是一致的(msdn当然还是应该相信的),问题在于:它说的不够清楚,它的意思是说返回字符串的字符个数,不包括结束符NULL(参数要求是以NULL结束的字符串,我的理解应该还包括'/0'结束的)。

3. 我觉得正确的理解是,strlen()是返回字符个数,且这个个数应该是遇到null或'/0'之前的字符个数
我们来测试:

 

#include <iostream.h>
#include <string.h>
void main ()
{  
  char a[5] ;
 a[0]='a';
 a[1]='c';
 a[2]='/0';
 a[3]='a';
 a[4]='b';
 cout <<sizeof(a)<<endl;
 cout<<strlen(a)<<endl;
 cout <<sizeof("abc")<<endl;
 cout <<strlen("abc/0d")<<endl;
}

结果为
5
2
4
3


sizeof 如果*str是指针则返回 char *的大小 如果是用数组声明 返回的是空间的大小

char *sz = "abcde"//指针占4字节,详细见下面提示
char sz1[20= "abcde";
   char *sz2[20];//4*20
cout
<<sizeof(sz)<<endl;
cout
<<strlen(sz)<<endl;
cout
<<sizeof(sz1)<<endl;
cout
<<strlen(sz1)<<endl;
cout<<sizeof(sz2)<<endl;

输出:
4
5
20
5
80


提示
        C中对int型所占的字节长度并没有明确规定,只有一个最大值和最小值,所以具体实现与编译器有关,比如TC中int占两个字节,而VC中占4个字节。但是指针由于表示内存的地址,因此取决于机器的字长,即存储器地址的位数,所以普通的32位机器自然就是占4个字节

指针的类型是由什么决定的呢?  
  sizeof(Type   *)=??  
  ==================  
  指针的大小是由内存寻址空间决定的,即地址总线决定。  
   
  一般32位机寻址空间4G,所以指针占4字节;  
   
  一般8位的单片机寻址空间是64k,所以指针占2字节。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值