也许这是一个简单的问题,因为我正在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)
谢谢你的时间!
这个
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错误.