c - strlen(null_terminated_array) 执行 printf("%zu", strlen(null_terminated_array)) 打印包含 '\0' 的 size_t
问题描述
如果我有一个char *null_terminated_array="hello"
,我认为printf("%zu",strlen(null_terminated_array))
应该打印5
(不包括'\0'
)而不是6
(包括'\0'
)。
解决方案
是的,这就是你所期望的。如果您想使用sizeof
而不是strlen
在阵列上,请小心:
char *null_terminated_array="hello";
char char_array[6]="hello";
printf("null_terminated_array = %s\n",null_terminated_array);
printf("strlen(null_terminated_array) = %zu\n",strlen(null_terminated_array));
printf("sizeof(null_terminated_array) = %zu\n",sizeof(null_terminated_array));
printf("\n");
printf("char_array = %s\n",char_array);
printf("strlen(char_array) = %zu\n",strlen(char_array));
printf("sizeof(char_array) = %zu\n",sizeof(char_array));
对于我在此运行的平台,
null_terminated_array = hello
strlen(null_terminated_array) = 5
sizeof(null_terminated_array) = 8
char_array = hello
strlen(char_array) = 5
sizeof(char_array) = 6
明显的差异sizeof(null_terminated_array)
与使用 32 位块(取决于平台)的自动内存分配有关。
推荐阅读
- python - 子类属性从父类指向同一个对象引用
- azure - Azure 管道命令行:给予确认
- postgresql - 如何在 Odoo 的 create 方法中编写 SQL 查询?
- vuepress - 如何不将“asp.net”视为 VuePress 中的链接
- c# - 通过命令行为 testrail 运行测试
- reactjs - 我们如何在 chartist.js 中更改 pie-donut 的颜色
- sql - 将 GROUP BY 与 SELECT CASE WHEN 语句一起使用
- node.js - 如何在多阶段 docker 文件中 pnpm 和 Next.js?
- python-3.x - PyBullet 中的确定性OverlappingPairs 设置有什么作用?
- ubuntu - 如何在桌面上自定义 ubuntu 安装程序?