C++空字符数组的长度> 0

标签 c++ arrays char

有一个基本的 C++ 问题。我发现未初始化的字符数组的长度 > 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

最佳答案

由于您还没有初始化这些值,您将得到未定义的行为。也就是说它们可以包含任何东西。也许是零,也许是随机数据。

将未初始化的字符缓冲区传递给 printf 是未定义的行为,不应这样做。这可能有效,也可能无效。获得已定义行为的唯一方法是正确初始化它。

关于C++空字符数组的长度> 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402212/

相关文章:

c++ - 加法运算如何加速内存访问?

c++ - 为什么我的结构中映射的构造函数不起作用?

C++ 返回一个数组

c++ - 如何在 for 循环中进行错误捕获

C - 打印一个充满 Unicode 符号的数组

c - C 中的二维 Char 数组意外输出

c++ - PyRun_SimpleString 因 def foo() : 而失败

c++ - 如何抑制 C++ 关键字?

java - 如何在 char 数组中存储字符数。基本上想要在数组上使用增量运算符

c - 为什么采用 char 指针指针的函数不起作用?