c语言字节长度的区别,C语言中,strlen和sizeof的区别

本博客整理自网络,仅供学习参考,如有侵权,联系删除。邮箱:rom100@163.com。

首先strlen是一个函数,sizeof是一个单目运算符。

strlen 它用来计算指定字符串 str 的长度,但不包括结束字符(即 null 字符)。其原型如下面的代码所示:

size_t strlen(char const* str);

char sArr[] = "ILOVEC";

/*用strlen()求长度*/

printf("sArr的长度=%d\n", strlen(sArr));

很显然,上面示例代码的运行结果为 6(因为不包括结束字符 null)。

关键字 sizeof 是一个单目运算符,参数可以是数组、指针、类型、对象、函数等,如下面的示例代码所示:

char sArr[] = "ILOVEC";

/*用sizeof求长度*/

printf("sArr的长度=%d\n", sizeof(sArr));

相对于函数 strlen,这里的示例代码运行结果为 7(因为它包括结束字符 null)。同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。

例子:

char str[20]="0123456789";

int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。

int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。

strlen使用时注意事项:

strlen只能用char*做参数,且必须是以''\0''结尾的。换句话说:strlen只能计算字符串的长度。

sizeof使用时注意事项:

1 对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。如果是一个指针的话,则输出在该系统中地址的字节宽度,即(位宽/8)。

如下代码:则会以输出4, 30(一个char占一个byte空间), 4。

int *a;

char b[30];

char *c;

printf("%d, %d, d\n", sizeof(a), sizeof(b),sizeof(c));

2 如果是通过函数传递过来的地址,那么sizeof会把数组首地址和指针无差别当成是地址。

如下的代码段输出 4, 4

void test_sizeof_addr(char *a)

{

printf("%d\n", sizeof(a));

}

void test_sizeof_array(char a[])

{

printf("%d\n", sizeof(a));

}

int main()

{

char b[30];

test_sizeof_addr(b);

test_sizeof_array(b);

return 0;

}

常见的sizeof用法:

计算数组的长度

int len = sizeof(array)/sizeof(array[1]);

动态分配内存

int *ptr = malloc(10*sizeof(int));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值