如何删除二维char数组指针的项

时间:2019-03-01 00:17:00

标签: c arrays pointers multidimensional-array

我正在使用一个二维char数组指针,换句话说,是一个字符串数组数组。该指针位于struct内,我正在尝试删除字符串数组。

换句话说,如果我有以下数组:

{ { "Foo", "Bar" }, { "Baz", "Fee" }, { "Var", "Bar" } }

我正在尝试删除中间数组

{ { "Foo", "Bar" }, { "Var", "Bar" } }

struct是以下

struct Data {
    int size;

    char(*items)[10][64];
}

我尝试对数组进行迭代,并将最前面的位置向后移动一个,如下所示(假设我正在尝试消除位置1)

int positionInArray = 1;
// Suppose that data struct is filled
for (int x = positionInArray; x < data->size; x+ ) {
  (*(*data->items[x])) = (*(*data->items[x+1]));
}

我不确定这是正确的方法,显然我无法删除该项目。

1 个答案:

答案 0 :(得分:0)

如果使用普通的数组索引而不是指针解引用,那么它就不会造成混乱。您可以使用for (int x = 0; x < sizeof(data->items[0])/sizeof(data->items[0][0]); x++) { free(data->items[positionInArray][x]); } 一次复制整行。

如果字符串是动态分配的,则在移动数组元素之前,需要释放要删除的行所指向的项目。

for

然后,size-1循环移动行的限制应为for (int x = positionInArray; x < data->size-1; x++) { memcpy(data->items[x], data->items[x+1], sizeof(data->items[x])); } data->size--; ,否则,您将尝试将行复制到最后一个有效行之后。

export default