首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何删除二维字符数组指针的一项

如何删除二维字符数组指针的一项
EN

Stack Overflow用户
提问于 2019-03-01 08:17:00
回答 1查看 50关注 0票数 1

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

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

代码语言:javascript
复制
{ { "Foo", "Bar" }, { "Baz", "Fee" }, { "Var", "Bar" } }

我正在试着删除中间的数组

代码语言:javascript
复制
{ { "Foo", "Bar" }, { "Var", "Bar" } }

struct如下所示

代码语言:javascript
复制
struct Data {
    int size;

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

我尝试迭代数组并将前面的位置向后移动一次,如下所示(假设我试图消除位置1)

代码语言:javascript
复制
int positionInArray = 1;
// Suppose that data struct is filled
for (int x = positionInArray; x < data->size; x+ ) {
  (*(*data->items[x])) = (*(*data->items[x+1]));
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 09:04:57

如果你使用普通的数组索引,而不是指针引用,就不会那么令人困惑了。您可以使用memcpy()一次复制整行。

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

代码语言:javascript
复制
for (int x = 0; x < sizeof(data->items[0])/sizeof(data->items[0][0]); x++) {
    free(data->items[positionInArray][x]);
}

那么用来移动行的for循环的限制应该是size-1,否则您将尝试将行复制到最后一个有效行之后。

代码语言:javascript
复制
for (int x = positionInArray; x < data->size-1; x++) {
    memcpy(data->items[x], data->items[x+1], sizeof(data->items[x]));
}

data->size--;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54936220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档