我是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)
我真的很困惑声明之间的区别,它们是如何存储在内存中的.
在C语言族中,表示strings(char arrays)的内存空间由空字符终止\0
因此,当你用它写出来时,存储字符串的内存必须至少比预期大小大一个字符 " "
您的新示例不是创建字符串,而是创建字符数组.因为您已经将符号形式切换" "到{ }系统,所以不再创建空终止字符串,而是创建一个数组,因为这就是您所要求的.
它的关键在于弦乐是特殊的,并且\0系统自动加到它们的末端,因此需要额外的空间.