【发布时间】:2019-12-13 15:27:17
【问题描述】:
我试图想办法在不使用realloc 的情况下扩展字符串容量。例如这段代码的主要区别是什么:
void insert(char *dest, char *src, int pos){
char *temp = malloc(strlen(dest)+strlen(src)+1);
/*
malloc failure handling
*/
strcpy(temp,dest);
//rest of code
}
和:
void insert(char *dest, char *src, int pos){
char *temp =(char*)realloc(dest,strlen(dest)+strlen(src)+1);
/*
realloc failure handling
*/
dest = temp;
//rest of code
}
或者有什么更好的方法吗?
注意src 和dest 都使用malloc 初始化。
【问题讨论】:
-
可能是一个链表。可能无法使用
string.h操作。 -
这两个代码或多或少做同样的事情,但无论如何它们都有缺陷,
insert的调用者永远不会看到新指针。在 C 中,变量是按值传递的。实际上realloc基本上是这样做的:1.分配新的大小。 2. 将旧缓冲区的内容复制到新分配的内存中。 3. 释放旧缓冲区。 realloc有什么问题?我们需要更多的上下文信息。基本上你不能不使用某种形式的动态内存分配来做到这一点。 -
"主要区别" 是第二个 sn-p 不必要地转换了返回
void*的分配函数的结果! ;)
标签: c string memory-management malloc realloc