【发布时间】:2012-06-29 12:55:26
【问题描述】:
考虑这段代码:
char buffer[] = "abcdefghijklmnopqrstuvwxyz",
*val = malloc(10), *pbuf = buffer, *pval = val, *tmpbuf;
int size = 10,loaded = 0;
while(*pbuf) {
if((loaded + 1) >= size) {
size += 10;
tmpbuf = realloc(val, size);
if(tmpbuf != NULL) {
val = tmpbuf;
pval = val;
} else {
printf("realloc()\n");
exit(-1);
}
}
*pval ++= *pbuf ++;
loaded ++;
}
*pval ++= '\0';
printf("%s\n", val);
free(val);
它打印tuvwxyz 而不是abcdefghijklmnopqrstuvwxyz。
为什么?根据文档,realloc() 返回的新指针不保留先前传递的缓冲区。
【问题讨论】:
-
我应该如何复制它?
strncpy()或val[x] = ..? -
@RichardJ.RossIII 它实际上是 "*pval++ = *pbuf++;",但是空格使它看起来像一个奇怪的运算符。
标签: c memory-management realloc