如何重置来自struct的数组

时间:2019-03-25 12:59:16

标签: c

我创建了这个结构:

typedef struct {
    char* id; 
    char* name;
    int birthYear;
    int finishedCourses;
    double avarage;
    int coursesNow;
    int courses[MAX_COURSES_YEAR];
}Student;

现在我正在尝试设置一系列课程。

这是我写的:

s1.courses[] = {5,4,3,2};

,错误是:

  

student.c:15:13:错误:“]”标记之前的预期表达式
  s1.courses [] = {5,4,3,2};

2 个答案:

答案 0 :(得分:4)

int courses[]={5,4,3,2};
memcpy (s1.courses, courses, sizeof(courses));

其他方法是:

typedef struct {
    char* id; 
    char* name;
    int birthYear;
    int finishedCourses;
    double avarage;
    int coursesNow;
    int courses[];
}Student;

int courses[]={5,4,3,2};
Student *s = malloc(sizeof(Student)+sizeof(courses));
memcpy (s->courses, courses, sizeof(courses));

在第二种情况下,优点是您可以在运行时为课程分配维度,而不必为字段使用填充空间或静态固定空间。

还有其他方法可以实现。

答案 1 :(得分:2)

仅在声明时才允许通过初始化列表初始化数组。因此,您可以这样做:

int arr[] = {1,2,3,4,5};

但是您不能这样做:

int arr[5];
arr = {1,2,3,4,5};

您必须使用循环或memcpy:

int tmp[] = {1,2,3,4,5};
// method 1
for(int i = 0; i < sizeof(tmp) / sizeof(*tmp); i++) {
    arr[i] = tmp[i];
}
// method 2
memcpy(arr, tmp, sizeof(tmp));

您还可以利用复合文字并省去tmp数组:

memcpy(arr, (int []) {1,2,3,4,5}, sizeof((int []) {1,2,3,4,5}));