在 C 中使用 realloc 在内存块之前而不是之后添加 space

Adding space before the memory block rather than after it using realloc in C

我已经分配了一个字符数组,我想在数组的开头添加另一个字符,同时保持顺序。

例如。如果指针指向 4 个字符块的开头: A,B,C,D -> pointer[0]==A 。如果我添加 E,内存块应该如下所示: E,A,B,C,D -> pointer[0]==E.

此外,我想在一行中完成,而无需手动将元素复制到另一个块并擦除第一个块。所有函数都必须来自 C 标准库。

我有类似 pointer = realloc(pointer-1, (n-1)*size) 的东西,但我不能保证 pointer-1 是免费的.

提前感谢您的回答

Adding space before the memory block rather than after it using realloc

realloc()重新分配,然后用memove()移动数据。

I want to do it in one line,

要么使用像下面这样的辅助函数,要么使用难以阅读且不可维护的长行。

char *realloc_one_more_in_front(char *ptr, size_t current_size) {
  void *new_ptr = realloc(ptr, sizeof *ptr * (current_size + 1));
  if (new_ptr == NULL) {
    return NULL; // Failure to re-allocate.
  }
  ptr = new_ptr;
  memmove(ptr + 1, ptr, sizeof *ptr * current_size);
  return ptr;
}

示例用法。为简单起见,省略了错误处理。

size_t current_size = 4;
char *ptr = malloc(current_size);
for (size_t i = 0 ; i<current_size; i++) {
  ptr[i] = 'A' + i;
}

ptr = realloc_one_more_in_front(ptr, current_size++);
ptr[0] = 'E';

printf("%.*s\n", (int) current_size, ptr);