假设我有一个名为"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;
}