c - 为什么空数组的字符串长度与数组大小不同?
问题描述
在 C 中返回空字符串的长度和大小时,值不同。为什么呢?
char b[7];
printf("String Length: %d", strlen(b)); // Returns 22
printf("String Size: %d", sizeof(b)); // Returns 7
解决方案
这是因为您的阵列的分配空间没有被清除。所以在你所在的堆栈上char b[7];
有随机数据。strlen() 函数从内存位置 b[0] 开始搜索结束字符 '\0'。
在您的情况下,找到第一个 '\0' 字符并且第 23 个位置导致长度为 22。这个 22 的数字是未定义的行为,每次运行代码时都可能不同。
如果在 b[0] 处使用 '\0' 初始化数组,它将返回长度为 0。
推荐阅读
- c# - Unity中OverlapCircle与某些碰撞器之间的接触点
- string - Import String Values from a .csv file to MATLAB
- android - Android Studio BottomNavigationView 图标问题
- mercurial - 将 hg 条添加到 hgrc 配置文件
- forms - Play with Scala 中的复选框列表
- typescript - 如何定义一个 Typescript 函数,通过名称交换两个对象属性的值,并检查类型兼容性?
- python - 如何避免在 python 2.7 中使用 global?
- python - Numpy如何创建具有不同数据类型的一维数组
- swift - Swift macOS Process.run() 端口泄漏
- c# - 画布图像不能无缝滚动