我使用的是一个二维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]));
}
我不确定这是不是正确的方式,显然我无法删除该项目。
发布于 2019-03-01 09:04:57
如果你使用普通的数组索引,而不是指针引用,就不会那么令人困惑了。您可以使用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--;
https://stackoverflow.com/questions/54936220
复制相似问题