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;
}
}
1 に答える
1
まず、C で の戻り値をキャストしないでくださいmalloc()
。
第 2 に、return list;
を返す関数の は奇妙であり、int
問題を引き起こす可能性があります。Server *
意味を成すためには、関数が(の型) を返さなければならないことは明らかlist
です。または、list
引数に型Server **
を持たせ、呼び出し元のポインターを書き直すこともできますが、これは多くの場合、あまり便利ではありません。
char
第 3 に、id のポインターのみをコピーするため、たとえば異なる名前を保持するローカル バッファーでこれを呼び出すと、記述した効果が得られます。で 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 に答える