在c

时间:2016-09-19 01:49:24

标签: c

我尝试制作一个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时,值将变为垃圾值。
有没有办法复制回来?

0 个答案:

没有答案