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字节。