strlen计算空终止数组长度时printf输出结果是否包含末尾'\0'?
问题验证结论
你的判断完全正确,这段代码最终输出结果就是5。
核心依据
- C标准对
strlen的行为有明确定义:该函数仅统计从传入的字符指针起始位置,到首个'\0'终止符之前的字符总数,'\0'本身不会被计入统计结果。 - 字符串字面量
"hello"在内存中实际存储的序列是h、e、l、l、o、'\0',总占用6字节的存储空间,但strlen遍历到'\0'就会停止计数,因此返回值为5。 - 你使用
%zu作为size_t类型的格式符也符合C语言规范,没有类型匹配问题。
常见易混点提醒
不要混淆strlen和sizeof的行为:如果是按数组形式定义char arr[] = "hello",sizeof(arr)的结果才是6,该运算统计的是整个数组的总存储空间大小,会包含末尾'\0'占用的1字节。
内容的提问来源于stack exchange,提问作者user786
相关产品推荐
相关产品推荐

