首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改c-2二维Char阵列

修改c-2二维Char阵列
EN

Stack Overflow用户
提问于 2013-09-02 11:30:01
回答 3查看 67关注 0票数 2

我使用了2个2d字符数组来表示一个5x5网格。问题是,当涉及到函数的最后4行时(我在数组中设置了一些字符的值,我使用它们进行测试)。如果我打印出网格,它看起来就像这样。

SP_HumanGrid:

代码语言:javascript
复制
11---
-----
-----
-----
-----

SP_AIGrid:

代码语言:javascript
复制
11---
-----
-----
----1
11---

这里的代码:

代码语言:javascript
复制
char SP_HumanGrid[4][4]; //The Human player's grid
char SP_AIGrid[4][4]; //The AI player's grid

void SP_EmptyGrids(void)
{
int nRow,nCol;

for (nRow=0;nRow<5;nRow++)
{
    for (nCol=0;nCol<5;nCol++)
    {
        SP_HumanGrid[nRow][nCol] = POINT_WATER;
        SP_AIGrid[nRow][nCol] = POINT_WATER;
    }
}

SP_HumanGrid[0][0] = POINT_SHIP1;
SP_HumanGrid[0][1] = POINT_SHIP1;
SP_AIGrid[0][0] = POINT_SHIP1;
SP_AIGrid[0][1] = POINT_SHIP1;
}

我没有其他函数修改SP_AIGrid变量的值。它们不应该看起来一样吗,因为我把它们设置为相同的值吗?

PS:不要问这方面的想法,我是通过在控制台中创建一个战列舰游戏来测试语言的。我知道这是错误的..。很蠢但我还是想试试。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-02 11:34:29

您正在访问超出界限的SP_AIGridSP_HumanGrid4x4矩阵。因此,您可以从索引0访问3而不是4,这是一个未定义行为

您知道,您只在SP_AIGrid中的索引4(行和列)上获得未定义的行为。幸运的是,它不在SP_HumanGrid中。

票数 1
EN

Stack Overflow用户

发布于 2013-09-02 11:31:36

你的数组很小。索引从0到4,即5个条目,但您只将它们声明为4个。这意味着您正在覆盖内部数组,并将其写入超出它们的范围。

在声明数组时输入的数字不是顶部的索引,而是大小。

票数 3
EN

Stack Overflow用户

发布于 2013-09-02 11:37:01

您的for循环应该是

for (nRow=0;nRow<4;nRow++)

for (nCol=0;nCol<4;nCol++)

要记住的一个盲规则是,如果您声明了一个大小数组,那么for循环应该从0开始,在大小之前结束1。这意味着

for(i=0;i<SIZE;i++)

在C中,不要在比较中添加<=

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18572201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档