Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组在C+中打印不正确+;_C++_Arrays - Fatal编程技术网

C++ 数组在C+中打印不正确+;

C++ 数组在C+中打印不正确+;,c++,arrays,C++,Arrays,运行此程序时,如果n的值设置为10,它将打印数组a的索引和从a[0]到a[9]的存储值。但是,如果我将n的值设置为大于10,则它仅打印数组a从a[0]到a[5]的索引及其存储值。有人能给我解释一下为什么会这样吗 #include <iostream> using namespace std; int main() { int a[10]; int i, n=11; for(i=0; i<n; i++) { a[i]= 5; }

运行此程序时,如果
n
的值设置为10,它将打印数组
a
的索引和从
a[0]
a[9]
的存储值。但是,如果我将
n
的值设置为大于10,则它仅打印数组
a
a[0]
a[5]
的索引及其存储值。有人能给我解释一下为什么会这样吗

#include <iostream>
using namespace std;

int main()
{
    int a[10];
    int i, n=11;

    for(i=0; i<n; i++) {
        a[i]= 5;
    }

    cout<<"The array is: \n";   

    for(i=0; i<n; i++)
    {
        cout<<"a["<<i<<"] = "<<a[i]<<endl;
    }

    return 0;
}
#包括
使用名称空间std;
int main()
{
INTA[10];
int i,n=11;

对于(i=0;i如果将
n
的值增加到超过数组的大小(或等于从0开始的索引),则将超过数组的结尾。超过数组的结尾是未定义的行为。如果程序显示未定义的行为,则任何情况都可能发生


如果切换到
std::array
而不是C数组,并使用
.at()
,然后会发生一些定义良好的情况,您将得到一个
std::out_of u range
异常。有关更多信息,请参阅和@PaulR,postoed代码是一个完整的示例,在OP使用的任何编译器上都显示了该问题。但是问题从代码中是明确的。因为您使用的是C++14,请查看基于和的范围std::array。后者在访问越界索引时,在调试模式下可能会提供额外的错误处理。@PaulR哦,我明白了,你是pendantic。尽管问题是,当你将n从10更改为大于10的值时,问题会显现出来,并且进行/读取只是一个很小的更改,但你希望发布的代码与t引发了一个问题……给你:@PaulR问题很清楚。代码与N10一起工作。我做了一个编辑,应该让你满意。编辑:知道你可能会挑剔,n=0。@iheani:谢谢你帮助改进问题。我现在也清理了文本,以便让其他人更容易理解。@πάνταῥεῖ 你错了,使用sizeof(a)无法告诉你如果索引超过数组的末尾会发生什么,这实际上是未定义的行为。@iheanyi我说你可以很容易地使用它来检查访问特定索引是否有效。你们都是对的:)只是说了些不同的话!@iheani我不太在乎。吃块饼干吧:你说得对。未定义的行为是未定义的。@πάνταῥεῖ 谢谢,饼干很好吃