2016-12-24 3 views
1

Ich habe folgende verknüpfte Listendatenstruktur:Wie konvertiert man eine verkettete Liste von Strings in ein Array von Zeichen in C?

struct _node { 
    char *text; 
    stuct _node *next; 
} 

Ich möchte, um eine Funktion schreiben, die diese verketteten Liste in ein Array von Zeichenketten mit jeder Zeichenfolge konvertiert durch \ n und das gesamte Array von \ 0 beendet beendet wird, .

Zum Beispiel, wenn die verknüpfte Liste war:

[first]->[second]->NULL

dann sollte das Array wie folgt aussehen:

[f][i][r][s][t][\n][s][e][c][o][n][d][\n][\0]

Hier mein Versuch ist:

char *convertToArray(struct _node *head){ 
    assert(head != NULL); 

    int lines = findLines(head); 
    int i = 0; 
    struct _node *curr = head; 

    char *textBufferArray = NULL; // return NULL if lines == 0 
    textBufferArray = malloc(charCount(head) + lines + 1); 
    // malloc enough memory for all characters and \n and \0 characters 

    if (lines > 0){ 
     while (curr->next != NULL){ 
      strlcpy(textBufferArray[i], curr->text, strlen(curr->text)+1); 
      // I need to add a new line here 
      curr = curr->next; 
      i++; 
     } 
    } 

    I need to add \0 before returning 
    textBufferArray[charCount(head) + lines] = '\0'; 

    return textBufferArray; 
} 
+0

warum Sie keinen char Zeiger auf Array verwenden jeder String –

+0

Curious zu speichern, warum die 'sizeof (char) *' ', die nur 1 *' ist? – chux

+2

Beachten Sie, dass das, was Sie machen, kein Array von Strings ist. Es ist eine Reihe von Zeichen/eine riesige Zeichenfolge. Vielleicht möchten Sie Ihre Frage klären. –

Antwort

2

In Anbetracht Sie haben m alloced genügend Speicher ist es so einfach wie dieses

int i=0... 
while(cur) 
{ 
    int n =strlen(cur->S),k=0; 
    while(n--) 
    giant[i++]=cur->S[k++]; 
    giant[i++]='\n'; 
    cur=cur->next; 
} 
giant[i++]='\0'; 
+0

Danke @BLUEPIXY – coderredoc

Verwandte Themen