Как передать (struct) указатель массива указателей на функцию? - PullRequest
1 голос
/ 16 апреля 2019

У меня есть структура указателей и глобальный указатель для использования в функциях, объявленных после main.Теперь можно объявить функции с теми же именами указателей.Но когда я вызываю ее в другой функции (потому что она похожа на программу типа меню), я продолжаю получать разные типы ошибок. Например, требуется выражение, неожиданный тип и т. Д. У меня вопрос просто, как мне вызвать параметры для функцииработать.Я не использовал C годами, поэтому решение может показаться проще, чем кажется.Код ниже покажет вам, что я имею в виду.

StudentPtr studentArt StudentPtr ** studentArray struct StudentPtr * studentArray * StudentPtr studentArray [] (в значительной степени перемещает указатели и использует struct в качестве префикса)

typedef struct Student {
    char *firstName;
    char *lastName;
    char *id;
    char *email;
} Student, *StudentPtr;

//Prototypes:
int fillData(StudentPtr studentArray,char* f, char* l, char* id, char* e,int n);
int displayData(StudentPtr studentArray, int n);
int displayDataAll(StudentPtr studentArray);

int main()
{
return 0;
}

int command(char line[])
{
//other code here
//some more code..
//......

//error below
if(lineSize==0)    /* If the command is empty, asks again for a command */
    {
        return 0;
    }

    else
    {
        if(strncmp(line,"1",lineSize)==0)
        {reset();}

        else if(strncmp(line,"2",lineSize)==0)
        {fillData(StudentPtr studentArray,char* f, char* l, char* id, char* e,int n);} //the first parameter here

        else if (strncmp(line,"3",lineSize)==0)
        {modify(StudentPtr studentArray,char* f, char* l, char* id, char* e,int n);} //here as well

        else if(strncmp(line,"4",lineSize)==0)
        {displayDataAll(StudentPtr studentArray);} //here too


        else if(strncmp(line,"5",lineSize)==0)
        {return 1;}
        else
        {noComm();}
    }

    return 0;
}

//example of the functions supposed to be used
int fillData(StudentPtr studentArray,char* f, char* l, char* id, char* e,int n)
{
    //get the start of the nth record
    //Ptr arithmetic
    StudentPtr currentStudentptr = studentArray+(n-1);

    //allocate memory for the character pointers
    currentStudentptr->firstName =malloc(sizeof(char)*20);
    strcpy(currentStudentptr->firstName,f);

    //... same for others

    return 0;

}

Вызов функции здесь должен правильно вызывать функции, которые находятся ниже.

1 Ответ

2 голосов
/ 16 апреля 2019

Вы смешиваете синтаксис для объявления и определения функции с синтаксисом для вызова функции:

    {fillData(StudentPtr studentArray,char* f, char* l, char* id, char* e,int n);} //the first parameter here

При вызове функции вы не должны указывать тип. Вы предоставляете только аргументы:

    {fillData(studentArray, f, l, id, e, n);}

Вы не показываете определение переменной. Поэтому я не могу сказать, имеют ли переменные правильные типы или вам нужно добавить некоторые & операторы здесь и там ... По этой причине обязательным является минимум полный проверяемый пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...