考虑我有一个名为"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");
有没有办法做到这一点?
答案 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;
}