我正在编写一个程序,我需要将学生添加到一系列结构中。
嗯,一开始我有以下结构数组:
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;:
之前输入&#34; add_student&#34; - &GT;在函数&#34; add_student&#34;:
如你所见,&#34;学生&#34;现在有5个元素......
答案 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)