也许这是一个简单的问题,因为我正在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;
}
感谢时间!
答案 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
错误。