我正在使用一个二维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]));
}
我不确定这是正确的方法,显然我无法删除该项目。
答案 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