使用 memcpy 将动态结构数组的内容复制到另一个动态数组中
copying the content of an dynamic array of structs into another dynamic array using memcpy
我想将包含 2 个结构的动态数组的内容复制到另一个相同大小的动态数组。
我需要一份原样。当我编译时,我在最后一行得到了这两个错误:
invalid use of undefined type ‘struct student’ & dereferencing pointer to incomplete type
我不明白这两个错误。
这是我的代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct Movie{
char name [7];
int price;
int year;
};
int main(int argc, char ** argv){
struct Movie m1,m2;
strcpy(m1.name,"Rambo");
m1.price=20;
m1.year=1980;
strcpy(m2.name,"universal soldier");
m2.price=30;
m2.year=1990;
struct Movie * db= malloc(2*sizeof(struct Movie));
*db=m1;
*(db+1)=m2;
int i;
for(i=0;i<2;i++){
printf("%s\n",(*(db+i)).name);
}
struct student * db_copy= malloc(2*sizeof(struct Movie));
memcpy(&db_copy,&db,sizeof(db));
for(i=0;i<2;i++){
printf("%s\n",(*(db_copy+i)).name); //here occur the two errors
}
}
你需要让编译器知道 struct student
是什么,代码中没有。
错误的意思是:
- 未定义类型“struct student”的无效使用:您使用的是未定义类型
- 取消引用指向不完整类型的指针:您正在取消引用(访问实际值/结构)不完整类型,因为缺少类型的定义。
我想真正的问题是你打算写:
struct Movie * db_copy= malloc(2*sizeof(struct Movie));
我想将包含 2 个结构的动态数组的内容复制到另一个相同大小的动态数组。
我需要一份原样。当我编译时,我在最后一行得到了这两个错误:
invalid use of undefined type ‘struct student’ & dereferencing pointer to incomplete type
我不明白这两个错误。
这是我的代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct Movie{
char name [7];
int price;
int year;
};
int main(int argc, char ** argv){
struct Movie m1,m2;
strcpy(m1.name,"Rambo");
m1.price=20;
m1.year=1980;
strcpy(m2.name,"universal soldier");
m2.price=30;
m2.year=1990;
struct Movie * db= malloc(2*sizeof(struct Movie));
*db=m1;
*(db+1)=m2;
int i;
for(i=0;i<2;i++){
printf("%s\n",(*(db+i)).name);
}
struct student * db_copy= malloc(2*sizeof(struct Movie));
memcpy(&db_copy,&db,sizeof(db));
for(i=0;i<2;i++){
printf("%s\n",(*(db_copy+i)).name); //here occur the two errors
}
}
你需要让编译器知道 struct student
是什么,代码中没有。
错误的意思是:
- 未定义类型“struct student”的无效使用:您使用的是未定义类型
- 取消引用指向不完整类型的指针:您正在取消引用(访问实际值/结构)不完整类型,因为缺少类型的定义。
我想真正的问题是你打算写:
struct Movie * db_copy= malloc(2*sizeof(struct Movie));