错误:预期的标识符或'(''''''之前的标记

Mar*_*rco 0 c syntax

也许这是一个简单的问题,因为我正在linux中开始C编程.我正在开发一个客户端/服务器程序,当我试图添加用户时,GCC给我这个错误:"server.c:71:16:期望的标识符或'(''''''''''我无法理解问题出在哪里.第71行是我调用AddUser函数的时候.

int main(){

    int fifo_1,fifo_2,i,num_args, status_triage, users_verify, login=0;
    char name_fifo[20], comand[20], arg_1[20], arg_2[20], username[20];
    struct request req;
    users_list list = NULL;

    //LOGIN CYCLE
    do{

        if(strcmp(req.str, "exit") == 0) // If the user inserts "exit"
        {
            printf("check1\n"); 
            req.type = -1;
        }

        else // Add user
        {
            if(num_users < 4)
            {
                users_list = AddUser (list, req);
            }
            else if(num_users == 4) // The program has the maximum number of players
                    req.type=2; 
        }   

}while(req.login == 0);
Run Code Online (Sandbox Code Playgroud)

我不知道是否有必要,但我也放了AddUser函数:

users_list AddUser(users_list list, req req){

        users_list new, aux;

        new = malloc(sizeof(users_list));

        if (new == NULL){
            printf("Erro na alocacao de memoria!\n");
            return NULL;
        }

        strcpy(new->username, req.str);
        new->pid = req.pid;

        new->next = NULL;

        if (list == NULL)
            list = new;

        else{
            aux = list;
            while (aux->next != NULL)
                aux = aux->next;
            aux->next = new;
            }
            num_users++;

        return list;
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间!

AnT*_*AnT 5

这个

users_list = AddUser (list, req);
Run Code Online (Sandbox Code Playgroud)

毫无意义.users_list是一个类型名称.您无法为类型指定任何内容.

您使用该类型名称来声明上面的变量

users_list list = NULL;
Run Code Online (Sandbox Code Playgroud)

是不是你打算使用那个变量,就像在

list = AddUser (list, req);
Run Code Online (Sandbox Code Playgroud)

?

基于这个的实现,AddUser你应该如何使用它:它返回新的列表头指针值.


你的代码中的另一个问题是内存分配 AddUser

new = malloc(sizeof(users_list));
Run Code Online (Sandbox Code Playgroud)

users_list显然是指针类型.我不知道它指向什么类型,因为你没有显示你的定义users_list(它是指针req?),但无论如何sizeof(users_list)都给你一个指针的大小.这显然是不正确的.你需要sizeof指向的对象,而不是指针.我把它改成了

new = malloc(sizeof *new);
Run Code Online (Sandbox Code Playgroud)

并建议sizeof(type)尽可能避免在将来使用.更喜欢使用sizeof expression.通常,内存分配应如下所示

pointer = malloc(sizeof *pointer);
Run Code Online (Sandbox Code Playgroud)

这应该可以帮助您避免此类sizeof错误.