C语言 如何使用 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,"warann");

有什么办法可以做到这一点吗?

这是

正确的:

  strcat(ptr,"waran");

这是错误的:

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

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

    p += sizeof"bhuvanesh" - 1;

    p += strlen(p);

加上 sprintf(p,"warann") 向字符串添加 6 个字节,但您只重新分配了 5 个字节,所以要么

 ptr = realloc(ptr, 16);

或放下'n',例如

    strcpy(p, "waran");

将是合适的。

把头痛留给操作系统; 不和你在一起;我的意思是不要使用 strlen、strcpy 和使用 + 来查找确切的位置;现在,通过以下方法,您已经完成了所需的操作;保持简约时尚(亲吻)

#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("%sn", ptr);
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新