gpt4 book ai didi

c - 从c中的字符串数组中删除字符串

转载 作者:行者123 更新时间:2023-11-30 15:39:16 25 4
gpt4 key购买 nike

我正在处理一项作业,我必须编写一个函数,该函数接受动态分配的字符串数组和索引,并删除该索引处的元素。使用提供的示例主函数来测试代码,它在第一次调用该函数时崩溃,我不知道为什么。这是我的代码。

int removeElement(ArrayList *list, int index)
{
int i;

if(list != NULL && index < list->size)
{
for(i = index; i < list->size - 1; i++)
{
free(list->array[i]);
list->array[i] = malloc(sizeof(char) * (strlen(list->array[i + 1]) + 1));
if(list->array[i] = NULL)
{
printf("Can't allocate memory. Returning 0.\n");
return 0;
}

strcpy(list->array[i], list->array[i + 1]);
}

free(list->array[i]);
list->array[i] = NULL;
list->size--;
return 1;
}

return 0;
};

我认为这可能是因为第一个字符串(“姓名列表”)比第二个字符串(“Sean”)大。但我仍然对它的工作原理感到困惑。

最佳答案

这不是对您问题的直接答案,但您不妨复制指针而不是所有这些 mallocstrcpy:

int i;
if (list != NULL && index < list->size)
{
free(list->array[index]);
for (i=index; i<list->size-1; i++)
list->array[i] = list->array[i+1];
list->size--;
return 1;
}

或者,如果您不介意字符串的顺序,那就更好了:

if (list != NULL && index < list->size)
{
free(list->array[index]);
if (index < list->size-1)
list->array[index] = list->array[list->size-1];
list->size--;
return 1;
}

关于c - 从c中的字符串数组中删除字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com