C ++复制2D数组的一部分

时间:2018-11-14 13:08:58

标签: c++

我写了一个大程序,它有一些意外的行为,所以我制作了另一个较小的程序来测试问题。

我的问题是,由于某种原因,每当我cin元素[0][2]出现在2x2数组中时 它还会复制到元素[1][0]

例如,如果我的数组是

000
000
000

,然后将右上角的元素输入为“ A”(例如),然后左中角的元素也变为“ A”,反之亦然。 [1][2][2][0]

中的元素也存在相同的问题

这是我的代码:

#include<iostream>

using namespace std ;

char array[2][2];

void display()
{
    cout<<endl;
    for (int i=0;i<3;i++ )
    {
        for (int j=0;j<3;j++ )
        {
            cout<<array[i][j];
        }
        cout<<endl;
    }
}

int main ()
{
    for (int i=0;i<3;i++ )
    {
        for (int j=0;j<3;j++ )
        {
            array[i][j]='0';
        }
    }
    display();
    cin>>array[0][2];
    display();
}

1 个答案:

答案 0 :(得分:2)

如果您最多要访问array[2][2],则必须将数组定义为char array[3][3];

数组T foo[SIZE]的有效索引为0 ... SIZE - 1

请注意,array是一个非常糟糕的名称,因为还有std::array<>,并且您正在使用using namespace std;,这会将所有符号从命名空间std溢出到全局命名空间中。 / p>

使用

#include <iostream>

using namespace std;

char array[3][3];

void display()
{
    cout << endl;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cout << array[i][j];
        }
        cout << endl;
    }
}

int main()
{
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            array[i][j] = '0';
        }
    }

    display();
    cin >> array[0][2];
    display();
}

它按预期工作:

输出:

000
000
000
A

00A
000
000