【发布时间】:2015-12-18 19:52:34
【问题描述】:
我正在编写一个程序,我需要将学生添加到结构数组中。
好吧,一开始我有以下结构数组:
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);
但是现在我的问题:在我的“add_student”函数中,我得到了一个具有奇怪结构的数组:它包含自己作为第一个元素,并且每个其他元素都移动了一个元素。
无法弄清楚问题是什么......有人可以帮忙吗?
编辑:有人问我,这怎么可能。数组如何将“自身”作为第一个元素。
好吧,这里是调试器(xCode)的截图:
在输入“add_student”之前:
输入“add_student”后 -> 在函数“add_student”中:
如您所见,“学生”现在有 5 个元素...
【问题讨论】:
-
i<sizeof(students)没有达到您的预期。 -
请注意,与您的声明相反,您确实不在代码中呈现结构数组。那将是一个数组,其元素是结构(这是允许的)。相反,您提供了一个指针数组(指向结构)。
-
注意:
void add_student(...) { ... return return_value; }是个问题。void函数不返回值。 -
@chux 是的,对不起,我知道这只是由“复制和粘贴”和翻译成英文引起的 :)