如何删除bidimensional char数组指针的项

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (25)

我正在使用二维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]));
}

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

提问于
用户回答回答于

如果使用普通的数组索引而不是指针解除引用,那就不那么容易混淆了。您可以使用memcpy()一次复制整行。

在移动数组元素之前,您需要释放指向您要删除的行的项目。

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--;

扫码关注云+社区

领取腾讯云代金券