gpt4 book ai didi

c - 如何在C中连接字节数组

转载 作者:行者123 更新时间:2023-12-02 09:10:25 27 4
gpt4 key购买 nike

我当前的concat函数:

char* concat(char* a, int a_size,
char* b, int b_size) {
char* c = malloc(a_size + b_size);
memcpy(c, a, a_size);
memcpy(c + a_size, b, b_size);
free(a);
free(b);
return c;
}

但这占用了额外的内存。是否可以使用 realloc附加两个字节数组而不占用额外的存储空间?

喜欢:
void append(char* a, int a_size, char* b, int b_size)
...

char* a = malloc(2);
char* b = malloc(2);

void append(a, 2, b, 2);
//The size of a will be 4.

最佳答案

是的,因为如果新的大小更大,realloc将保留缓冲区的开始:

char* concat(char* a, size_t a_size,
char* b, size_t b_size) {
char* c = realloc(a, a_size + b_size);
memcpy(c + a_size, b, b_size); // dest is after "a" data, source is b with b_size
free(b);
return c;
}
c可能与 a不同(如果原始内存块无法被系统连续地就地调整为新大小),但是如果是这种情况,则 a所指向的位置将被释放(您不得释放它),并且原始数据将被“移动”。

我的建议是警告您的函数用户,必须使用 malloc分配输入缓冲区,否则它将严重崩溃。

关于c - 如何在C中连接字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53005765/

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