我尝试制作一个Insert函数,它可以获得动态分配的结构,它的大小和位置。 完成复制到临时指针后。我试图复制,但它不起作用。
void Insert(Student *ptr, int n, int p)
{
if(p < 1 || p > (n+1) )
{
printf("Position out of Bound!\n");
return;
}
Student *temp;
temp = (Student *)malloc( (n+1) * sizeof(Student));
// copy ptr to temp
memmove(temp, ptr, p * sizeof(Student));
memmove(temp+(p+1), ptr+(p+1), n * sizeof(Student));
// get info
printf("Enter the Roll number : ");
scanf("%d", &(temp+p)->rollNO);
printf("Enter the Student Name : ");
scanf("%s", (temp+p)->Name);
printf("Enter the Course : ");
scanf("%s", (temp+p)->Class);
printf("Enter the Mark1 : ");
scanf("%d", &(temp+p)->Mark1);
printf("Enter the Mark2 : ");
scanf("%d", &(temp+p)->Mark2);
(temp+p)->avg = ( (temp+p)->Mark1 + (temp+p)->Mark2 ) / 2;
printf("\n");
// realloc and copy back
ptr = realloc(ptr, sizeof(temp));
memmove(ptr, temp, sizeof(temp));
free(temp);
}
我应该使用memcpy,memmove或者只是等同的操作?
对不起,我很抱歉
我将解释为流程,
1.获得动态分配的学生结构,结构数量,插入位置
2.制作临时结构
3.将ptr复制到temp,直到函数得到的位置为止
4.将ptr复制到temp后的位置,直到ptr结束为止
5.然后获取信息到临时的'p'位置
6.重新分配指针大小
7.将temp复制回ptr
,主要功能是......
int main()
{
Student *Sptr;
int num; // get number by scanf
Sptr = (Student *)malloc(num * sizeof(Student));
int pos;
scanf("%d", &pos);
Insert(Sptr, num, pos);
num++;
}
第一个和第二个memmove工作并且我检查了,但每当我尝试将temp复制回ptr时,值将变为垃圾值。
有没有办法复制回来?