int add_server(Server *list, char *server_id, char *capacity)
{
Server *new_node=(Server *)malloc(sizeof(Server));
new_node->id=server_id;
new_node->capacity=atoi(capacity);
if(list==NULL)
{
list=new_node;
list->next=list;
return list;
}
else
{
Server *temp=list;
while(temp->next!=list)
{
temp=temp->next;
}
temp->next=new_node;
new_node->next=list;
}
}
问问题
30 次
1 回答
1
其次,return list;
返回的函数很奇怪int
,这可能会导致问题。显然,函数必须返回Server *
(的类型list
)才能有意义。或者它可以使list
参数具有类型Server **
并重写调用者的指针,但这通常不太方便使用。
第三,您只复制 id 的指针,因此如果使用例如char
保存不同名称的本地缓冲区调用它,您将获得您描述的效果。您需要使 id 成为实际的数组Server
,或者strdup()
在存储之前调用参数。
所以,要么:
typedef struct {
/* ... */
char server_id[32];
/* ... rest of fields ... */
} Server;
strlcpy(new_node->server_id, server_id, sizeof new_node->server_id);
或者:
new_node->id = strdup(server_id);
于 2013-04-03T09:29:21.133 回答