#include <stdio.h>
#include<stdlib.h>
void *mymemmove(const char *str1,const char* str2,int n)
{
char *tmp = (char*)malloc(sizeof(char)*n);
memcpy(tmp,str2,n);
memcpy(str1,tmp,n);
free(tmp);
return NULL;
}
int main(void) {
// your code goes here
char *p1,*p2,*p3,*p4;
//p1= (char *)malloc(sizeof(char)*30);
p1="ankitagrawal";
p2=p1+2;
char *tmp = (char*)malloc(sizeof(char)*13);
memcpy(tmp,p1,13);
memcpy(p2,tmp,13);
printf("p1 = %s /n p2= %s tmp =%s",p1,p2,tmp);
//mymemmove(p2,p1,13);
//printf("p1 = %s /n p2= %s",p1,p2);
return 0;
}
我的代码在main函数的第二个memcpy中崩溃了。任何人都可以告诉我代码有什么问题吗?
答案 0 :(得分:0)
通过使用p2 = p1 + 2然后尝试从p2中记忆13个字节,将为分配给p2的内存增加2个字节,这肯定会产生错误。
请考虑以下代码:
char *p1, *p2, *p3, *p4;
p1 = "ankitagrawal";
p2= (char *)malloc(14);
memcpy(p2, p1 + 2, 14);
printf("\np2 = %s", p2);
char *tmp = (char*)malloc(14);
memcpy(tmp, p1, 14);
memcpy(p2, tmp, 14);
printf("p1 = %s \np2= %s \ntmp = %s", p1, p2, tmp);