sizeof和strlen的区别

本文深入解析了C/C++中sizeof和strlen函数的区别与使用场景。通过实例演示了sizeof如何计算变量或类型的字节数,以及strlen如何计算字符串的字符数量(不包含终止符)。文章还探讨了不同类型指针的大小及其与编译器的关系。

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

VC---sizeof()与strlen()的区别

FROM>> http://hi.baidu.com/elseif/blog/item/40ba82cea6ac5b0292457efd.html

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、付费专栏及课程。

余额充值