【发布时间】:2015-02-24 05:36:00
【问题描述】:
我在使用用于写入数组元素的函数时遇到问题。
我认为这可能是因为我没有正确传递结构数组。我想知道是否有人可以指出如何正确地做到这一点。我一直在搞砸而不是修复它。
假设我有一个函数menu.c
我声明我的结构newPerson person[MAX_PERSONS];
然后我运行我的函数addPerson(person, &num);
以下是
void addPerson(newPerson *pers, int *num){
pers[*num] = (newPerson) {
"Michelle", "Leo", "6136458798", STUDENT,
.data = {.s = {9, 1234.50, 3}}
};
*num = *num + 1;
}
它运行,但不能正确打印出来,我猜是因为它没有写到我想要的位置pers[num]。我也尝试以这种方式调用函数 addPerson(&person, &num); 而不仅仅是 addPerson(person, &num); 但随后我收到此错误
警告:从不兼容的指针类型传递“addPerson”的参数 1 [默认启用]
和
注意:预期为“struct newPerson ”,但参数类型为“struct newPerson ()[20]”
我也尝试将函数更改为void addPerson(newPerson *pers[], int *num){,但那里什么也没有。想知道是否有人可以指出我在这里做错了什么以及如何解决我的问题。任何帮助将不胜感激,谢谢!
忘了提到 addPerson 函数在我运行它的某些地方有效。
int menu(int num) {
newPerson person[MAX_PERSONS];
//printf("THE NUMBER START OF MENU IS %d\n", num); test counter
//addPerson(person, &num); <- WRITES AND READS PROPERLY IF DONE HERE
int option;
printf(
"\n\tPlease choose one of the following options to continue (0-9): ");
scanf("%d", &option);
if (option == 1) { //program will ask for name input
addPerson(person, &num); <- HOWEVER IT DOES NOT WRITE OR READ PROPERLY HERE
menu(num);
}
这两个函数都在menu.c 中调用
但是,当我在 if 语句中调用 addPerson 时,它无法正确写入/读取。
刚刚通过将结构声明为静态来解决问题!
static newPerson person[MAX_PERSONS];
我不确定这是禁忌还是什么,但它解决了我的问题!
【问题讨论】:
-
我会大胆猜测您正在越界访问
person。在addPerson中使用之前num的值是多少? -
问题是
person数组是一个局部变量,你递归调用menu函数。