2015-02-26 6 views
0

Я пытаюсь реализовать функцию свопинга для связанного списка.c - функция подкачки для односвязного списка строк

инициализации выглядит следующим образом

typedef struct node 
{ 
    char data[50]; // data 
    struct node *next; // a pointer to next node 
} Node; 

typedef Node* NodePtr; 

В одной из моих функций я пытаюсь поменять местами две функции с помощью

swap(&(p->data), &(q->data)); 

где p и q являются NodePtr «s.

Моя функция своп выглядит следующим образом:

void swap(char *a, char *b) 
{ 
    char *t; // temporary 

    t = *a; 
    *a = *b; 
    *b = t; 
} // end swap() 

Я получаю следующее сообщение об ошибке: [Error] cannot convert 'char (*)[50]' to 'char*' for argument '1' to 'void swap(char*, char*)'

Я знаю, это означает, что мне нужно изменить, как я объявляю свои функции, но я просто не уверен, как изменить их, чтобы правильно делать то, что я хочу.

+1

Проблема заключается в том, что 'data' не является указателем, это массив, и ваша функция подкачки работает только в том случае, если' data' является указателем. У вас есть два варианта: a) сделать 'data' указателем (и иметь дело с управлением памятью), или b) скопировать байты массива в функцию swap. – user3386109

+0

Функциональность свопа, которую вы * видимо * пытаетесь реализовать, имеет * ничего * со связанным списком. Все это, похоже, пытается сделать, это буферы обмена swap, и пропускает лодку в декларации, обращаясь к * и * разыменованию. Какова фактическая * проблема *, которую вы пытаетесь решить? «Функция подкачки для связанного списка» не является проблемой. То, что сказано - функция должна * делать * и как она должна быть * использована * ?? – WhozCraig

+0

@WhozCraig это была просто функция сортировки, с которой я играл. – user2958395

ответ

0

Проверьте приведенный ниже код о том, как заменить две строки в структуре.

#include <stdio.h> 

struct a 
{ 
    char c[50]; 
}; 

void swap(char *p,char *q) 
{ 
    char t[50] = ""; 
    strcpy(t,p); 
    strcpy(p,q); 
    strcpy(q,t); 
} 
int main(void) { 
    struct a *A = malloc(sizeof(struct a)); 
    struct a *B = malloc(sizeof(struct a)); 
    strcpy(A->c,"some"); 
    strcpy(B->c,"string"); 
    printf("%s %s\n",A->c,B->c); 
    swap(A->c,B->c); 
    printf("%s %s\n",A->c,B->c); 
    free(A); 
    free(B); 
    return 0; 
} 
+0

Это сделало именно то, что я хотел, и поэтому я его приму. Но теперь я знаю, что это не лучший способ манипулировать связанными списками – user2958395

Смежные вопросы