【发布时间】:2018-05-18 00:33:52
【问题描述】:
有一个基本的 C++ 问题。我发现未初始化的 char 数组的长度 > 0。有人可以解释一下吗?
#include <iostream>
int main() {
char test1[5];
test1[4] = 0;
printf("test1 array %s, length %d\n", test1, strlen(test1));
char test2[128];
test2[127] = 0;
printf("test2 array %s, length %d\n", test2, strlen(test2));
}
这会打印(为什么第一个数组为空且长度为零,而第二个数组为非空且非零长度)?:
test1 array , length 0
test2 array 8??, length 6
【问题讨论】:
-
由于您使用的是 C++,因此了解
std::vector和std::string之类的内容非常重要。strlen是 C 代码,不属于这里,除非您的目标是编写 C 代码。 -
如果你不初始化你的变量,它们可能会充满任何东西,包括连续 6 个非 0 字节。
-
现在数组在编译时是固定大小的容器。因此,当您创建数组时,无论您是否初始化它,它都会分配内存。
-
我发现未初始化的 char 数组的长度 > 0。 -- 我真的不明白你为什么感到惊讶。如果它没有初始化,你期望什么?
-
@PaulMcKenzie 看到这个也是我的问题。 null 终止数组展示了一些关于事情如何工作的知识。如果假设未初始化的数组都为零,那么就没有理由显式地为 null 终止它们。