2D数组添加额外字符

时间:2017-11-28 15:24:39

标签: c arrays

这是我的代码,用于附加到2D数组并逐行显示到网格中。

void map_print() {

    char map[head->xdim][head->ydim]; // Generate 2D array for map
    memset( map, 0, sizeof(map));

    FEATURE *temp=head->next; // Get the pointer of the head of linked list

    while(temp!=NULL) // Generated the map with the features
    {
        for (int xdim = 0; xdim < temp->xdim; xdim++){
            map[temp->yloc][temp->xloc + xdim] = temp->type;
            printf("X axis: Appeding to map[%d][%d]\n",temp->yloc,temp->xloc+xdim);
        }
        for (int ydim = 0; ydim < temp->ydim; ydim++){
            map[temp->yloc + ydim][temp->xloc] = temp->type;
            printf("Y axis: Appeding to map[%d][%d]\n",temp->yloc + ydim,temp->xloc);

        }
        temp=temp->next;
    }

    for (int i = 0; i < head->ydim; i++) { // Print out the map
        for (int j = 0; j < head->xdim; j++) {
            //printf("%c ", map[i][j]);
            printf("map[%d][%d](%c)",i,j,map[i][j]);
        }
        printf("\n");
    }
}

enter image description here

基于printf,它只应附加到以下坐标。但是,map(1)(4),map(2)(4),map(3)(4),map(4)(4)是我没有附加的打印*。

我无法找到添加该额外字符

的任何代码行

1 个答案:

答案 0 :(得分:0)

你混合了x和y。声明为char map[head->xdim][head->ydim];[x][y]),但您使用的是map[temp->yloc][temp->xloc + xdim] = temp->type;[y][x])。

如果您的数组大小为[10][5]并且您正在访问[0][9],那么它将调用未定义的行为(因为超出访问权限),并且有一种可能性是它将访问[1][4](取而代之的是2D阵列中的第十个元素。