У меня возникают проблемы с функцией, которую я использую для записи в элемент массива.Проблема Проблема с массивом структур с помощью указателей
Я думаю, это может быть потому, что я не передаю массив структуры правильно. Мне было интересно, может ли кто-нибудь указать, как это сделать правильно. Я заставляю его больше, чем исправлять его.
скажем, у меня есть функция 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);
но я получаю эту ошибку
предупреждение: передавая аргумент 1 из «addPerson» от несовместимого типа указателя [по умолчанию включено]
и
примечание: ожидаемый '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
Однако, когда я называю addPerson в заявлении, если он не писать/читать правильно.
Просто решил проблему, объявив структуру статичной! static newPerson person[MAX_PERSONS];
Я не уверен, что это табу или что-то еще, но это исправило мою проблему!
я собираюсь сделать дикое предположение, что вы обращаетесь ' человек' вне. Какова ценность 'num' перед использованием в' addPerson'? –
Проблема заключается в том, что массив 'person' является локальной переменной, и вы вызываете функцию' menu' рекурсивно. – user3386109