strlen和sizeof区别

`sizeof`和`strlen`在C语言中都是常用的函数/运算符,但它们的用途和工作方式不同。让我们详细了解一下它们的区别。

 1. sizeof

`sizeof`是一个**运算符**,用于计算变量或数据类型的**大小**(以字节为单位)。它在**编译时**就已经计算出结果。

用法
- `sizeof`可以用来计算任何数据类型的大小(例如`int`、`char`、`float`等),也可以用来计算数组、结构体、指针等复杂类型的大小。

 示例

c

#include <stdio.h>

int main() {
    int a = 10;
    char str[20] = "hello";
    
    printf("int 类型的大小: %zu bytes\n", sizeof(a));       // 输出 int 类型的大小
    printf("char[20] 数组的大小: %zu bytes\n", sizeof(str)); // 输出 char 数组的大小
    printf("指针的大小: %zu bytes\n", sizeof(char*));        // 输出指针类型的大小
    
    return 0;
}


 

输出

```
int 类型的大小: 4 bytes
char[20] 数组的大小: 20 bytes
指针的大小: 8 bytes   (假设运行在64位系统上)
```

特点

- `sizeof`在计算数组大小时,会返回整个数组的大小(即:元素个数乘以单个元素的大小)。
- `sizeof`在计算指针时,返回的是指针本身的大小(例如在64位系统上通常是8字节)。
- `sizeof`对字符串字面量的计算会包括末尾的空字符 `'\0'`。

 2. strlen

`strlen`是一个**函数**,用于计算以**`'\0'` 结尾的字符串**的**长度**(不包括字符串的终止字符 `'\0'`)。它在**运行时**计算字符串的长度。

 用法
- `strlen`用于计算字符串的实际字符数,不包括`'\0'`。

 示例

c

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

int main() {
    char str[20] = "hello";
    
    printf("字符串的长度: %zu\n", strlen(str)); // 输出字符串的长度,不包括末尾的 '\0'
    
    return 0;
}


 

 输出:
字符串的长度: 5
 

特点

- `strlen`只适用于字符串(字符数组),它只能计算**以 `'\0'` 结尾的字符串**长度。
- `strlen`不包括末尾的空字符 `'\0'`。
- `strlen`的参数必须是一个字符指针或字符数组,而不能是一个非字符串类型的数组。

3.sizeof 和 strlen 区别

 示例比较1

	printf("%d",sizeof("hello"));
	printf("%d", strlen("hello"));

输出结果:

65

因为strlen计算长度时不包括 \0    (字符串结束符);

比较2

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

int main() {
    char str[20] = "hello";
    
    printf("sizeof(str): %zu\n", sizeof(str));   // 输出数组的总大小: 20
    printf("strlen(str): %zu\n", strlen(str));   // 输出字符串的长度: 5
    
    char *ptr = "world";
    printf("sizeof(ptr): %zu\n", sizeof(ptr));   // 输出指针的大小: 8 (在64位系统上)
    printf("strlen(ptr): %zu\n", strlen(ptr));   // 输出字符串的长度: 5
    
    return 0;
}


sizeof(str): 20      // `str` 是一个20字节的字符数组,`sizeof`返回整个数组的大小。
strlen(str): 5       // `str` 中的字符串 "hello" 长度为 5,`strlen` 返回字符数。
sizeof(ptr): 8       // `ptr` 是一个指针(在64位系统上通常是8字节)。
strlen(ptr): 5       // `ptr` 指向字符串 "world",长度为5。
```

总结

  • sizeof用于获取数据类型或变量的内存大小
  • strlen 用于获取字符串的**实际长度**(不包括终止符 `'\0'`)。
  • 使用`sizeof`时要注意它返回的是**数组总大小**,而`strlen`返回的是**字符串的长度**。
  • 在字符串操作中,`strlen`是更常用的,因为它计算的是字符串的有效字符数,而不是整个数组的大小。
  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值