【C/C++】strlen 和sizeof 的区别

10 篇文章 2 订阅

strlen

头文件:#include <string.h>/#include < cstring >
strlen()是库函数,用来计算字符串的长度,其原型为:
unsigned int strlen (char *s);
【参数说明】s为指定的字符串。
strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0"。

sizeof

sizeof()是运算符,其值在编译时 就已经计算好了,参数可以是数组、指针、类型、对象、函数等。
sizeof()用来获取某个数据类型所占用空间的字节数。
sizeof无关’\0’

1、数组——编译时分配的数组空间大小
2、类型——该类型所占的空间大小
3、指针——存储该指针所用的空间大小(在32位机器上是4,64位机器上是8)
4、函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
5、联合类型操作数的sizeof是其最大字节成员的字节数。

区别

1.sizeof()是运算符,strlen()是库函数
2.sizeof()在编译时计算好了,strlen()在运行时计算
3.sizeof()计算出对象使用的最大字节数,strlen()计算字符串的实际长度
4.sizeof()的参数类型多样化(数组,指针,对象,函数都可以),strlen()的参数必须是字符型指针(传入数组时自动退化为指针)

举例

#include<stdio.h>
#include<string.h>
struct 
{char x;
 int y;
} z;
int fun(){
 	return 88;
}
int main()
{
  char *str1 = "abcdefg";
    char str2[100] = "http://baidu.com/";
    char str3[] = "asd";
    char str4[5] = "12345";
    printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1));
    printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2));
    printf("strlen(str3)=%d, sizeof(str3)=%d\n", strlen(str3), sizeof(str3));
    printf("strlen(str4)=%d, sizeof(str4)=%d\n", strlen(str4), sizeof(str4));
   
    printf("sizeof(z)=%d\n", sizeof(z));
    printf("sizeof(fun())=%d\n",  sizeof(fun()));
    return 0;
}
运行结果

char *str1 = “abcdefg”;

strlen(str1)=7, sizeof(str1)=4

str1的实际长度为7,所占内存为4
一个指针在32位的计算机上,占4个字节;
一个指针在64位的计算机上,占8个字节。

char str2[100] = “http://baidu.com/”;

strlen(str2)=17, sizeof(str2)=100

char str3[] = “asd”;

strlen(str3)=3, sizeof(str3)=4

char str4[5] = “12345”;

strlen(str4)=13, sizeof(str4)=5

strlen(str4)=13显然不对,13是没有意义的。

sizeof(z)=8

运行结果为sizeof(z)=8,而一般sizeof(char)+ sizeof(int)=5。这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。

sizeof(fun())=4

返回类型为int ,int 类型占4个字节

注意

strlen() 函数计算的是字符串的实际长度,遇到第一个’\0’结束。如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到’\0’停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值