sizeof & strlen

经常会遇到问 sizeofstrlen 的区别,虽然知道它们之间的区别,但都没有系统的认识到,因此在此处记录。

sizeof

sizeofC/C++ 中的一个运算符,用于计算对象或类型所占空间的字节大小。它有如下两种表示方式:

sizeof(type)
sizeof expression
  1. sizeof 不能用于函数类型(fountion types )、不完整类型(incomplete types)以及位域(bit-field glvalues)。
  2. sizeof 运用到引用类型时,它返回引用类型的字节大小。
  3. sizeof 运用到类类型时,它返回包含对齐填充的字节大小。
  4. sizeof 运用到空类上时,总是返回 1
  5. sizeof 运用于表达式时,它并不执行表达式。

strlen

strlenC/C++ 中的一个函数,用于计算字符串的字节长度,以空字符(null)结尾。由于 strlen 是函数,因此后面必须跟括号,其函数原型如下:

size_t strlen(const char *str);

由函数原型可知, strlen 的参数是字符串指针,从而不能给其他类型参数。

示例

sizeofstrlen 示例程序

#include <stdio.h>
#include <string.h>

int main()
{
  char str1[] = "\0";  // 默认会在字符串后面添加一个'\0',因此sizeof计算出来为2
  char str2[10] = "abcdef";
  char str3[1] = "\0";

  int a = 7, b = 3;
  int c = 0;

  printf("sizeof & strlen\n");
  printf("sizeof(str1) = %zd\n", sizeof(str1));
  printf("strlen(str1) = %zd\n", strlen(str1));
  printf("sizeof(str2) = %zd\n", sizeof(str2));
  printf("strlen(str2) = %zd\n", strlen(str2));
  printf("sizeof(str3) = %zd\n", sizeof(str3));
  printf("strlen(str3) = %zd\n", strlen(str3));

  printf("\nsizeof\n");
  printf("sizeof(c=a+b) = %zd\n", sizeof(c=a+b));
  printf("c = %d\n", c);

  return 0;
}

输出结果如下:

sizeof & strlen
sizeof(str1) = 2
strlen(str1) = 0
sizeof(str2) = 10
strlen(str2) = 6
sizeof(str3) = 1
strlen(str3) = 0

sizeof
sizeof(c=a+b) = 4
c = 0

总结

  1. sizeof 是运算符, strlen 是函数;
  2. sizeof 后可跟括号也可不跟括号,strlen 是函数必须跟括号;
  3. sizeof 后跟类型或表达式, strlen 参数类型为char *
  4. sizeof 计算类型或表达式所占字节大小, strlen 计算字符串长度(遇到\0结束);
  5. sizeof 后接表达式时,不会对表达式求值。
  6. C++ 中对空类运用 sizeof 总是返回 1

参考文献

[1] http://en.cppreference.com/w/cpp/language/sizeof
[2] http://www.cplusplus.com/reference/cstring/strlen/?kw=strlen

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值