2016-04-30 2 views
0

einen Zeichenfolgenwert zu Ich muss einem Element in einer Struktur eine Zeichenfolge (Zeichen der Größe [255]) zuweisen. Die Struktur sieht wie folgt aus:C Weisen Sie einem Zeichenfolgenelement in einer Struktur mit einer Funktion

struct node{ 
    int ID, YEAR, MONTH, DAY 
    char CATEGORY[255], DETAIL[255]; 
    double AMOUNT; 
    struct node * next; 
} 
struct node * head = NULL; 

und ich habe Code, der Werte aus einer Textdatei empfängt und setzt es als eine Variable, die ich dann an die add_struct Funktion übergeben, die wie folgt aussieht:

void add_struct(int i, char c, char d, double a, int y, int m, int da){ 
    if (head == NULL){ 
     head = (struct node *) malloc(sizeof(struct node)); 
     head->ID = i; 
     head->CATEGORY = c; 
     head->DETAIL = d; 
     head->AMOUNT = a; 
     head->YEAR = y; 
     head->MONTH = m; 
     head->DAY = da; 
    } 

    else { 
     struct node * p = head; 
     while(p->next != NULL) p = p->next; 
     p->next = (struct node *) malloc(sizeof(struct node)); 
     p->next->ID = i; 
     p->next->CATEGORY = c; 
     p->next->DETAIL = d; 
     p->next->AMOUNT = a; 
     p->next->YEAR = y; 
     p->next->MONTH = m; 
     p->next->DAY = da; 
    } 
} 

Ich erhalte eine Fehlermeldung:

"incompatible types when assigning to type 'char[255]' from type 'char'" 

Wie ordne ich diese Werte den Elementen CATEGORY und DETAIL richtig zu?

+0

'char c '->' char * c' ... 'p> Weiter-> KATEGORIE = c; '->' strcpy (p-> next-> CATEGORY, c); ' – BLUEPIXY

+0

Bedeutet' char c, char d, 'wirklich ein einzelnes Zeichen oder ein Zeiger auf char (string)? – fluter

+0

Benötigen Sie auch XXX'-> next = NULL; ' – BLUEPIXY

Antwort

1

Das CATEGORY und DETAIL Feld des struct werden als Arrays von 255 Zeichen definiert, während c und d sind Variablen von char. So sollten Sie die Funktion void add_struct(int i, char *c, char *d, double a, int y, int m, int da) ändern, und kopieren Sie die Zeichenfolge an den zugewiesenen Struktur:

strcpy(head->CATEGORY, c); 
strcpy(head->DETAIL, d); 
+0

die Werte c und d sind nicht nur Zeichen, aber Char Arrays von Größe 255 auch. Ein Beispiel wäre, dass die KATEGORIE "Restaurant" und das DETAIL "Waffelhaus" ist. Funktioniert das noch? – user276019

+0

@ user276019 In diesem Fall müssen Sie die Funktionssignatur korrigieren und 'strcpy' in der Funktion verwenden. Siehe meinen Beitrag. – fluter

Verwandte Themen