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

时间:2014-08-13 23:38:47

标签: 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);

我不知道是否有必要,但我也放了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;
}

感谢时间!

1 个答案:

答案 0 :(得分:5)

users_list = AddUser (list, req);

毫无意义。 users_list是类型名称。您无法为某种类型分配任何内容。

您使用该类型名称来声明

之上的变量
users_list list = NULL;

没有使用该变量的意图,如

list = AddUser (list, req);

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


代码中的另一个问题是AddUser

中的内存分配
new = malloc(sizeof(users_list));

users_list显然是指针类型。我不知道它指向哪种类型,因为您没有显示users_list的定义(它是指向req的指针吗?),但无论如何sizeof(users_list)给出了你是指针的大小。这显然是不正确的。您需要sizeof指向的对象,而不是指针。我将其改为

new = malloc(sizeof *new);

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

pointer = malloc(sizeof *pointer);

这可以帮助您避免此类sizeof错误。