sizeof and strlen

本文详细解析了优快云和CPP博客中关于前端开发、后端开发、移动开发、游戏开发、大数据开发等领域的核心技术点,包括但不限于HTML、CSS、JavaScript、PHP、Python、MySQL、Vue、React、iOS开发、Android开发、Unity3D等。通过对比不同技术领域的特点和应用,为读者提供了一个全面的技术视角。
### C语言 `sizeof` 和 `strlen` 的区别及使用场景 #### 定义与功能差异 `sizeof` 是一个运算符,用于获取数据类型或变量在内存中所占的空间大小,单位为字节。此操作是在编译期完成的,因此其结果是一个常量表达式[^1]。 ```c #include <stdio.h> int main() { int a; printf("Size of int: %zu bytes\n", sizeof(a)); } ``` 而 `strlen()` 则是标准库中的一个函数,定义于 `<string.h>` 头文件内,专门用来测量以 null 结尾 (`\0`) 的字符数组的实际长度,即不包含终止符 `\0` 前的有效字符数[^2]。 ```c #include <stdio.h> #include <string.h> int main() { const char str[] = "example"; size_t length = strlen(str); printf("Length of string 'example': %zu characters\n", length); } ``` #### 对指针类型的处理不同 当应用于指针时,两者的行为存在显著差别: - 使用 `sizeof` 可得到该指针本身占据多少存储位——这通常取决于平台架构(比如32位系统上可能是4字节;而在64位环境下则可能达到8字节),而不是它指向的内容有多长。 - 而调用 `strlen()` 将遍历由指针指向的位置直到遇到第一个零值为止来统计有效字符的数量,从而得出实际字符串长度。 ```c char *str = "Hello"; printf("Size of pointer to str: %zu bytes\n", sizeof(str)); // 输出指针本身的尺寸 printf("String length pointed by str: %zu chars\n", strlen(str));// 计算字符串内容长度 ``` #### 应用实例对比 考虑下面的例子可以更直观地理解两者的异同之处: ```c #include <stdio.h> #include <string.h> struct Point { double x, y; }; union Data { long lval; float fval; }; int main(void){ struct Point pt; union Data data; puts("Sizes and lengths:"); /* 测试不同类型 */ printf("Size of char array \"hello\": %zu bytes\n", sizeof("hello")); // 包含 '\0' printf("Length of string literal \"hello\": %zu chars\n", strlen("hello"));// 排除 '\0' /* 测试结构体 */ printf("Size of structure Point: %zu bytes\n", sizeof(pt)); /* 测试联合体 */ printf("Size of union Data: %zu bytes\n", sizeof(data)); return 0; } ``` 通过以上代码片段可以看出,对于不同的对象,`sizeof` 总是返回它们各自分配到的总字节数,即使其中含有未初始化的部分也会被计入;相反,`strlen()` 更专注于评估特定形式的数据序列——特别是那些作为文本串使用的字符集,并且只关心从起始位置至首个空字符之间的距离[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值