在 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);
我已经分配了一个字符数组,我想在数组的开头添加另一个字符,同时保持顺序。
例如。如果指针指向 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);