我遇到了一个用于写入数组元素的函数的问题。
我认为可能是因为我没有正确传递struct数组。我想知道是否有人可以指出如何正确地做到这一点。我一直在搞砸它而不是解决它。
假设我有一个函数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];
我不确定这是禁忌还是其他什么,但它解决了我的问题!
答案 0 :(得分:1)
通过创建静态,你已经使代码效率低下来作为内存 无论是否存在,数据结构都已被搁置 程序执行时是否需要。(使用静态数据 结构,结构的大小是固定的。)
声明像
这样的函数void addPerson(newPerson *pers[],int *num)
调用函数
void addPerson(newPerson *pers, int *num);
OR
void addPerson(newPerson pers[], int *num);
答案 1 :(得分:0)
我能够通过将结构声明为静态
来使其工作 static newPerson person[MAX_PERSONS];
不确定这是否是一个实际修复,或者它是否只是掩盖了我的问题。