0
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;
    }

}
4

1 に答える 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 に答える