gpt4 book ai didi

通过设置为字符串文字初始化的 C++ 大小的 char 数组导致数组边界溢出

转载 作者:太空宇宙 更新时间:2023-11-04 16:23:34 24 4
gpt4 key购买 nike

我读到,当一个人初始化一个数组时,可以使用字符串文字。但是,如果 initializers 列表大于数组的大小,则会捕获错误。

#include "stdafx.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
char cAr2[3] = "ABC";
for (int i = 0; i < 3; i++)
cout<<cAr2[i]<<endl;
system("pause");

return 0;
}

嗯,这个例子在我的书中给出。真的是这样结束的:error C2117: 'cAr2' : array bounds overflow.

你能告诉我这里是什么吗:我可以看到一个包含 3 个元素的数组和 3 个元素被放入其中。一切似乎都还好。为什么会出错?

最佳答案

字符串文字 "ABC" 为您提供了一个“包含 4 个 const char 的数组”。有 4 个字符,因为字符串以空字符结尾。也就是说,您的初始化相当于:

char cAr2[] = {'A', 'B', 'C', '\0'};

空字符隐式附加到字符串的末尾,以便循环遍历数组内容的算法知道何时停止而无需显式指定字符串长度。

关于通过设置为字符串文字初始化的 C++ 大小的 char 数组导致数组边界溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com