您的位置:首页 > 其它

sizeof与strlen函数的区别

2015-04-18 11:13 218 查看



strlen是函数,而sizeof是算符

strlen函数,用来求字符串的长度,sizeof函数是用来求指定变量或变量类型(操作数)等所占用内存的大小且存储大小由操作数的类型决定。

  若操作数具有类型char、unsigned char或signed char,其结果等于1。

ANSI C正式规定字符类型为1字节。 其他类型:int(4)、unsigned int(4) 、short int(2)、unsigned short(2) 、longint(4) 、unsigned long(4)、float(4)、double(8)、longdouble(8)

当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4,
一般来说指针字节数为4。

例1:

int*p; int a[5];

p= a;

sizeof(p)的结果是4。

例2:

const char*pstars[]={"aa","bb","cc","dd"};

constint starCount=size of pstars/sizeof pstars[0];

sizeofpstars[0]的结果是4

当操作数具有数组类型时,其结果是数组的总字节数。

例如:int a[12]; sizeof(a)的结果是12 * 4 = 48。

联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。

  让我们看如下结构:

  struct {char b; double x;} a;

vc6.0结果为16

这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被8整除的地址。

对于静态数组处理:

char str[20]="0123456789";

strlen(str)=10; //表示数组中字符串的长度

sizeof(str)=20; //表示数组变量分配的长度

对于指针处理:

char *str="0123456789";

strlen(str)=10; //表示字符串的长度

sizeof(str)=4; //表示指针变量的所占内存大小

sizeof(*str)=1; //表示'0'这个字符变量的所占内存大小

对于数组:

char x[]="string";

x[0]=0; x[1]='\0';

计算:sizeof(x) = 7 strlen(x) =0
声明x的时候x里面存储的是"string\0",最后的\0是结束符,所以sizeof(x)就是7。

而\0的asccii码值为0,strlen(x)是计算到\0位置,strlen(x)也就是0了

如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。

例如:

void Func(int*c)
{
printf("%d/n",sizeof(c));
}
void Func(intc[13])
{
printf("%d/n",sizeof(c));
}


打印的都是4。

Strlen函数以符号\0结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: