如何添加数据使用realloc()函数重新分配内存后?

时间:2015-01-20 13:49:20

标签: c malloc realloc

考虑我有一个名为"bhuvanesh"的字符串,用于存储该字符串,最初使用malloc()分配内存

   char *ptr=(char *)malloc(sizeof("bhuvanesh"));
   sprintf(ptr,"bhuvanesh");

然后我想用先前存储的内存添加字符串,字符串为"waran"。所以我正在使用realloc()

 ptr=(char *)realloc(ptr,15);

函数realloc()将返回起始地址,因此连接我可以使用的字符串strcat()函数

  strcat(ptr,"waran");

或者我可以这样做

    char *p=ptr;
    p=p+sizeof("bhuvanesh");

    sprintf(p,"waran\n");

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

这是正确的:

  strcat(ptr,"waran");

这是错误的:

    char *p=ptr;
    p=p+sizeof("bhuvanesh");

    sprintf(p,"waran\n");

p=p+sizeof("bhuvanesh")会在字符串终止p后导致'\0'指向;正确的是

    p += sizeof"bhuvanesh" - 1;

    p += strlen(p);

Plus sprintf(p,"waran\n")为字符串添加了6个字节,但您只重新分配了5个字节,所以

 ptr = realloc(ptr, 16);

或删除'\n',e。克。

    strcpy(p, "waran");

是合适的。

答案 1 :(得分:0)

让头痛到操作系统;不和你在一起我的意思是不要使用strlen,strcpy和使用+来查找确切的位置;现在通过以下方法,您可以完成您想要的任务;保持简约时尚(KISS)

#include <stdio.h>
#include <malloc.h>
int main() 
{
    char *ptr = (char *) malloc(sizeof("bhuvanesh"));
    sprintf(ptr, "bhuvanesh");

    ptr = (char *)realloc(ptr, 15);

    sprintf(ptr, "%swaran", ptr);
    printf("%s\n", ptr);
    return 0;
}