sizeof strlen 的计算结果

本文通过C语言示例展示了如何使用sizeof和strlen函数来测量不同字符串和字符数组的大小。介绍了sizeof用于计算对象或类型的字节数,而strlen则用于获取字符串的长度直到遇到空字符结束。
#include <string.h>
#include <stdio.h>
void main()
{
	char *p = "this is ";
	printf("sizeof:%d ,strlen:%d\n",sizeof(p),strlen(p));
	// sizeof 在编译期间确定 用来计算某种类型或对象所占的字节数 p为指针 所占字节数为4 
	//strlen 在运行时求值 得到的字符串中第一个 '\0' 之前所有字符的数量 为8

	char a[] = "this is ";
	printf("sizeof:%d ,strlen:%d\n",sizeof(a),strlen(a));
	//a为字符数组 所占内存为8+1 = 9 所以sizeof 为9 strlen还是为8

	char b[] = "th\0 is ";
	printf("sizeof:%d ,strlen:%d\n",sizeof(b),strlen(b));
	//\0 为结束符 所以为一个字符 sizeof 为8 strlen为2
	printf("\n");
	getchar();
}


`sizeof` 和 `strlen` 是C语言中用于计算数组长度的两种不同方式,它们的使用方法和适用场景有所不同。 ### `sizeof` 计算数组长度 `sizeof` 是C语言中的一个关键字,用于计算对象所占内存的大小,以字节为单位。它不关心数组中是否包含 `'\0'`,计算的是整个数组在内存中所占的空间大小。对于数组,`sizeof` 计算的是数组中所有元素所占的字节数之和,包括字符串末尾的 `'\0'` [^2]。 示例代码如下: ```c #include <stdio.h> int main() { char str[] = "Hello"; int arr[] = {1, 2, 3, 4, 5}; // 计算字符串数组的大小,包含 '\0' size_t str_size = sizeof(str); // 计算整型数组的大小 size_t arr_size = sizeof(arr); // 计算字符串数组的元素个数 size_t str_elements = sizeof(str) / sizeof(str[0]); // 计算整型数组的元素个数 size_t arr_elements = sizeof(arr) / sizeof(arr[0]); printf("字符串数组的大小: %zu 字节\n", str_size); printf("字符串数组的元素个数: %zu\n", str_elements); printf("整型数组的大小: %zu 字节\n", arr_size); printf("整型数组的元素个数: %zu\n", arr_elements); return 0; } ``` 在上述代码中,`sizeof(str)` 计算的是字符串 `"Hello"` 及其末尾 `'\0'` 所占用的字节数,`sizeof(arr)` 计算的是整型数组中所有元素占用的字节数。通过 `sizeof(arr) / sizeof(arr[0])` 可以得到数组中元素的个数。 ### `strlen` 计算数组长度 `strlen` 是C语言标准库中的一个函数,主要用于计算字符串的长度,即字符串中 `'\0'` 之前的字符个数。它需要传入一个指向字符串的指针,从该指针指向的位置开始,向后查找直到遇到 `'\0'` 为止 [^4]。 示例代码如下: ```c #include <stdio.h> #include <string.h> int main() { char str[] = "Hello"; // 计算字符串的长度 size_t str_length = strlen(str); printf("字符串的长度: %zu\n", str_length); return 0; } ``` 在上述代码中,`strlen(str)` 计算的是字符串 `"Hello"` 中 `'\0'` 之前的字符个数,不包括 `'\0'` 本身。 ### 总结 - `sizeof` 可以用于计算各种类型数组的大小,包括非字符串数组,计算结果包含字符串末尾的 `'\0'`。 - `strlen` 专门用于计算字符串的长度,只计算 `'\0'` 之前的字符个数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值