[英]Allocating an array of strings
我正在嘗試創建一個數組來存儲多個字符串。字符串的最大大小為100。
這就是我的結構:
typedef struct
{
int size;
int capacity;
char** elements;
} array_strings;
我在以下函數中為空數組分配空間:
array_strings *array_strings_new()
{
array_strings *vec;
vec = (array_strings *)malloc(sizeof(array_strings));
if (vec == NULL)
return NULL;
vec->size = 0;
vec->capacity = 0;
vec->elements = NULL;
return vec;
}
然后我嘗試使用以下函數在向量的末尾插入元素:
int array_strings_insert(array_strings *vec, char *string, int pos)
{
int i;
if (vec == NULL || pos < -1 || pos > vec->size)
return -1;
/* increases capacity if needed */
if (vec->size == vec->capacity)
{
if (vec->capacity == 0)
vec->capacity = 1;
else
vec->capacity *= 2;
vec->elements = (char **)realloc(vec->elements, vec->capacity *sizeof(char *));
for (int i = 0; i < vec->capacity; i++)
{
vec->elements[i] = realloc(vec->elements[i], 100*sizeof(char));
}
if (vec->elementos == NULL)
return -1;
}
/* if pos=-1 inserts at the end of the array */
if (pos == -1)
pos = vec->size;
/* Copy elements from pos to pos+1 until the end of the array */
for (i = vec->size - 1; i >= pos; i--)
{
strcpy(vec->elements[i + 1], vec->elements[i]);
}
/* copy string */
strcpy(vec->elements[pos], string);
vec->size++;
return pos;
}
當我嘗試插入一個字符串時,我得到“realloc():無效指針Aborted(core dumped)”。
誰能告訴我我做錯了什么?
謝謝,
我試過這樣做:
vec->elements = (char **)realloc(vec->elements, vec->capacity *sizeof(char *));
for (int i = 0; i < vec->capacity; i++)
{
vec->elements[i] = NULL;
vec->elements[i] = realloc(vec->elements[i], 100*sizeof(char));
}
if (vec->elementos == NULL)
return -1;
}
而且我不再獲得“realloc():無效指針中止(核心轉儲)”。 但是由於某種原因,數組的第一個元素是空的。
您編寫的realloc代碼將破壞先前存儲的字符串。 例如,在數據大小從2增加到4的情況下,前2個字符串將丟失。
您可以按如下方式修改realloc部分。
int prevcapacity;
if (vec->size == vec->capacity)
{
prevcapacity = vec->capacity;
if (vec->capacity == 0)
vec->capacity = 1;
else
vec->capacity *= 2;
vec->elements = (char **)realloc(vec->elements, vec->capacity *sizeof(char *));
for (int i = prevcapacity; i < vec->capacity; i++)
{
vec->elements[i] = malloc(vec->elements[i], 100*sizeof(char));
}
}
在這種情況下,您可以在分配的額外字符串上使用malloc
。 將保留以前的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.