Visual C++ 6.0 - 为什么数组边界溢出?

dpp*_*dpp 1 arrays visual-c++

我是C++的新手,我必须使用数组.问题是我在这一行得到错误"数组边界溢出":

char arr[2] = "12";
Run Code Online (Sandbox Code Playgroud)

但当我把它改为:

char arr[3] = "12";
Run Code Online (Sandbox Code Playgroud)

它工作正常,但为什么?

更新:

这工作:(

char arr[2] = {'1','2'};
Run Code Online (Sandbox Code Playgroud)

我真的很困惑声明之间的区别,它们是如何存储在内存中的.

zel*_*lio 6

在C语言族中,表示strings(char arrays)的内存空间由空字符终止\0

因此,当你用它写出来时,存储字符串的内存必须至少比预期大小大一个字符 " "

您的新示例不是创建字符串,而是创建字符数组.因为您已经将符号形式切换" "{ }系统,所以不再创建空终止字符串,而是创建一个数组,因为这就是您所要求的.

它的关键在于弦乐是特殊的,并且\0系统自动加到它们的末端,因此需要额外的空间.