传递struct数组以使用malloc

时间:2015-12-18 19:52:35

标签: c arrays struct

我正在编写一个程序,我需要将学生添加到一系列结构中。

嗯,一开始我有以下结构数组:

struct student *students[4];

声明之后,我将这样的学生添加到数组中(只是为了举例......):

  students[0] = malloc(sizeof(struct student));
  students[0]->firstname = "Max";
  students[0]->secondname = "Taler";
  students[0]->number = 123456l;

...

现在我必须编写一个额外的函数,我可以将数组作为参数传递并添加一个新学生。

所以我的功能看起来像这样:

void add_student(struct student *students[],char *fristname, char *secondname, long number)
{
    int i=0;
    int new_position=0;
    int return_value = 0;
    // Search for the first available position for a new student 
    for(i=0; i<sizeof(students); i++)
    {
        if(students[i]==NULL)
        {
            new_position=i;
            return_value = 1;
            break;
        }
    }

    struct student *new_student = malloc(sizeof(struct student));
    students[new_position] = new_student;

    students[new_position]->fristname = fristname;
    students[new_position]->secondname = secondname;
    students[new_position]->number = number;

   return return_value; 
}

我用这段代码调用函数:

add_student(students, "Anni", "Karls", 123232);

但现在我的问题:在我的&#34; add_student&#34; function我得到一个具有奇怪结构的数组:它将自身包含为第一个元素,并将每个其他元素移位1个元素。

无法弄清楚问题是什么......有人可以帮忙吗?

编辑:有人问我,这是怎么回事。数组如何包含&#34;本身&#34;作为第一个元素。

嗯,这是调试器(xCode)的截图:

在输入&#34; add_student&#34;:

之前

before entering "add_student"

输入&#34; add_student&#34; - &GT;在函数&#34; add_student&#34;:

after entering "add_student" -> IN the function "add_student"

如你所见,&#34;学生&#34;现在有5个元素......

2 个答案:

答案 0 :(得分:4)

将数组的长度传递给函数并更改此

for(i=0; i<sizeof(students); i++)

到这个

for(i=0; i<arrayLen; i++)

似乎你要将一个元素插入到一个已预先分配的数组中的某个位置;插入可能是比添加更合适的术语,但这是意见。

你在函数内部对数组类型应用sizeof运算符 - 这可能会给你指针的大小,因为数组名称衰减为指针。

答案 1 :(得分:0)

静态分配数组然后动态分配各个结构有点奇怪。您可以考虑动态分配它们:

int num_students = 4;
struct student **students = malloc(sizeof(struct student) * num_students);

然后将add_student函数更改为如下所示:

void add_student(struct student *students[], int arr_size, char *firstname, char *secondname, long number)