2016-07-09 12 views
0

Ich versuche, eine Zeichenfolge aus einem Zeigerzeiger char (char **str) zu entfernen, entfernt meine Funktion die Zeichenfolge und Duplikate der verbleibenden Zeichenfolgen.String aus Zeigerzeiger-Zeichen in C entfernen

void remove_dup(char **split, char *name) 
{ 
    char **sp; 
    sp = split; 
    while (*sp != NULL) 
    { 
     if (strncmp(*sp, name, strlen(name)) == 0) 
     { 
      *sp = *(sp + 1); 
      sp++; 
     } 
     else 
      sp++; 
    } 
} 

complete code

+0

Uh, der Link sagt "Arbeitsbeispiel"? Was ist deine Frage? –

+0

Beispiel des Codes, mit Duplikaten. Ich möchte Duplikate entfernen. –

+2

Das sieht nicht so aus, als würde man Duplikate entfernen. Ihre Funktion sieht so aus, als ob sie alle Instanzen von 'name' aus der Liste entfernen soll. – melpomene

Antwort

3

Skipping eine Saite wird nicht funktionieren. Sie müssen die gelesenen und ungelesenen Strings im Auge behalten.

wird diese doppelte Einträge

void remove_dup(char **split, char *name) 
    { 
     char **read,**write; 
     read=write=split; 
     char count=0; 
     while (*read!=NULL){ 
      if (strncmp(*read, name, strlen(name)) == 0){ 
       if(count==0){ 
        *(write++)=*(read++); 
        count=1; 
       } 
       else{ 
        //free string 
        read++; 
        continue; 
       } 
      } 
      else 
       *(write++)=*(read++); 
     } 
     *write=0; 
    } 

entfernen Wenn die doppelten Einträge korrekt entfernt werden sollen, müssen Strings richtig befreit werden. Sie sollten die Art ändern, wie Sie Strings initialisiert haben, um dies tun zu können.

+0

Alternativ, wegen der Art, wie das Array von Zeigern auf Strings initialisiert wurde, gab es keine Notwendigkeit, die Strings freizugeben, aber wenn das Array mit dynamisch zugewiesenen Strings initialisiert wurde, dann dort müsste eine Strategie sein, um den nicht mehr referenzierten Speicher freizugeben, um Lecks zu vermeiden. –