Initialize array of structs in C
c, malloc, pointers, struct
Solution
This is incorrect:
student** students = malloc(sizeof(student));
You do not want a `**`. You want a `*` and enough space for how ever many students you need
student *students = malloc(numStudents * sizeof *students); // or sizeof (student)
for (x = 0; x < numStudents; x++)
{
students[x].firstName = "John"; /* or malloc and strcpy */
students[x].lastName = "Smith"; /* or malloc and strcpy */
students[x].day = 1;
students[x].month = 12;
students[x].year = 1983;
}
If you still want to use the code in your "//add struct" section, you'll need to change the line:
student* newStudent = {"john", "smith", 1, 12, 1983};
to
student newStudent = {"john", "smith", 1, 12, 1983};
You were getting "initialization from incompatible pointer type" because you were attempting to initialize a pointer to `student` with an object of type `student`.
Problem
I am having a problem initializing an array of structs. I'm not sure if I am doing it right because I get "initialization from incompatible pointer type" & "assignment from incompatible pointer type". I added in the code where I get these warnings, and when I try to print the data from the struct I just get garbage such as @@### ``` typedef struct { char* firstName; char* lastName; int day; int month; int year; } student; // Initialize array student** students = malloc(sizeof(student)); int x; for(x = 0; x < numStudents; x++) { // Here I get: "assignment from incompatible pointer type" students[x] = (struct student*)malloc(sizeof(student)); } int arrayIndex = 0; // Add struct // Create student struct // Here I get: "initialization from incompatible pointer type" student* newStudent = {"john", "smith", 1, 12, 1983}; // Add it to the array students[arrayIndex] = newStudent; arrayIndex++; ```