我试图在C中实现一个arraylist,它将字符串作为元素保存。以下是我到目前为止的情况:
类型定义结构数组列表{
整数长度;
国际能力;
字符*项目;
}ArrayList;
ArrayList*newList(){
char*items=malloc(4*sizeof(char));
ArrayList*list=malloc(sizeof(ArrayList));
列表->;长度=0;
列表->;容量=4;
列表->;项目=项目;
退货清单;
}
//检查并展开列表(如果需要)
无效检查(ArrayList*列表){
如果(列表->;长度>;=列表->;容量){
列表->;容量=列表->;容量*2;
列表->;项目=realloc(列表->;项目,列表->;容量*大小(字符));
如果(列表->;项==NULL){
出口(1);
}
}
}
void add(ArrayList*list,char*s){
检查(清单);
列表->;项[列表->;长度]=s;
列表->;长度++;
}
但是,当我尝试运行它时,会出现以下错误:
赋值从指针生成整数,无需强制转换[默认启用]。
列表->;项目[列表->;长度]=s;
因为字符串是字符数组,所以ArrayList.items应该是指向字符数组的指针数组。函数check()必须进行检查,必要时扩展此指针数组的容量。函数add()必须根据新字符串的大小为其分配空间
总之,修改后的代码可以如下所示:
#包括<;标准h>;
#包括<;字符串.h>;
#包括<;stdlib.h>;
类型定义结构数组列表{
整数长度;
国际能力;
字符**项目;
}ArrayList;
ArrayList*新列表(无效){
char**items=malloc(4*sizeof(char*));
ArrayList*list=malloc(sizeof(ArrayList));
列表->;长度=0;
列表->;容量=4;
列表->;项目=项目;
退货清单;
}
//检查并展开列表(如果需要)
无效检查(ArrayList*列表){
如果(列表->;长度>;=列表->;容量){
列表->;容量=列表->;容量*2;
列表->;项目=realloc(列表->;项目,列表->;容量*大小(字符*);
如果(列表->;项==NULL){
出口(1);
}
}
}
void add(数组列表*列表,常量字符*s){
检查(清单);
列表->;项目[列表->;长度]=malloc(strlen)+1;
strcpy(列表->;项[列表->;长度],s);
列表->;长度++;
}