首页 > 解决方案 > 为什么空数组的字符串长度与数组大小不同?

问题描述

在 C 中返回空字符串的长度和大小时,值不同。为什么呢?

char b[7];

printf("String Length: %d", strlen(b)); // Returns 22
printf("String Size: %d", sizeof(b));   // Returns 7

标签: cundefined-behaviorsizeofc-stringsstrlen

解决方案


这是因为您的阵列的分配空间没有被清除。所以在你所在的堆栈上char b[7];有随机数据。strlen() 函数从内存位置 b[0] 开始搜索结束字符 '\0'。

在您的情况下,找到第一个 '\0' 字符并且第 23 个位置导致长度为 22。这个 22 的数字是未定义的行为,每次运行代码时都可能不同。

如果在 b[0] 处使用 '\0' 初始化数组,它将返回长度为 0。


推荐阅读