释放字符串直到空终止符

Freeing string untill null terminator

假设我有一个结构

struct 
foo{
char *p1;
char *p2;
char *p3;
}foo;

并且我已经分配了 struct malloc - 分配的字符串行

#include <stdlib.h>
#include <string.h>

char temp[] = "this is string"
char *allocated_temp = malloc(sizeof(temp));
strcpy(allocated_temp, temp);

struct foo bar; 
bar.p1 = strtok(allocated_temp, " ");
bar.p2 = strtok(NULL, " ");
bar.p3 = strtok(NULL, " ");

我想释放 p1 而不释放 p2p3 指向的其他内存。 using realloc 将不起作用,因为 p3 将首先被释放,我正在寻找一个更优雅的解决方案,而不是使用将结构复制到没有第一部分的新结构或将其他两个字符串重新分配到一个不同的地址。

这个问题有什么好的解决办法?

(澄清一下,当我说我想释放 p1 时,我指的是字符串的 "this[=18=]" 部分。

标准工具(malloc 等)无法解决您的问题。您只能释放由 realloc()-ing 分配的较小尺寸的内存末端。

如果您想以这种方式释放 p1,您必须首先将数据移动到分配块的开头,更新指针(p2 和 p3),然后调用 realloc()

最好的方法可能是更改您的程序,以便分别 malloc p1、p2 和 p3。