Andreas Pflug: C-String teilen

Beitrag lesen

Hallo,

eigentlich sollte ich ja bei solch einem schönen Wetter nicht vor dem PC rumsitzen, aber ich muss das noch hinbekommen.
Ich habe einen String (also char-Array), den ich erstmal teilen muss, da dort einiger Schrott drin ist. Danach will ich den String mittels eines Trennzeichen in mehrer Strings (char-Arrays) teilen. Leider klappt das mit den mehrdimensionalen arrays einfach nicht. Hoffentlich kann mir jemand helfen...

Falls es wirklich nur ein einzelnes Trennzeichen ist,
kannst Du es Dir und der CPU auch leicht machen:

  1. Den gesamten String kopieren (nur, falls Du den
       Empfangspuffer noch anderweitig brauchst, ansonsten
       kann die Manipulation direkt im Empfangspuffer geschehen...)
  2. Alle '#' in der Kopie durch (char)0 ersetzen.
  3. Ein Pointer-Array vom typ char** anlegen, welches
       auf die jeweiligen Teilstring-Fragmente zeigt.

Viele Grüße

Andreas

Bsp:

  
#include<stdio.h>  
#include<string.h>  
#include<stdlib.h>  
  
int main(void) {  
  char empfangspuffer[] = "aklsdfjlkasdjflkasjdflkasdj#<start>#6#920FC1CD#Herr#Mustermann";  
  char trennzeichen = '#';  
  
  char *kopie = strdup(empfangspuffer); // Damit Original unveraendert bleibt.  
  char **result;                        // Hier kommen die Pointer auf die Teilstrings hinein  
  int  n=0;                             // ... und hier die Anzahl  
  
  char *tmp;  
  int   i;  
  
  for(tmp=kopie; *tmp; ++tmp)  
    if(*tmp==trennzeichen) { *tmp=(char)0; ++n; }  
  ++n;                                  // Es gibt einen Teilstring mehr als '#'s  
  
  result = (char**)malloc(n*sizeof(char*));  
  tmp = kopie;  
  
  for(i=0; i<n; ++i) {  
    result[i] = tmp;  
    tmp += strlen(tmp)+1;  
  }  
  
  // Ergebnisausgabe  
  
  printf("Anzahl der Teilstrings: %i\n", n);  
  for(i=0; i<n; ++i)  
    printf("Teilstring %i:  %s\n", i+1, result[i]);  
  
  // ggf. aufraeumen  
  free(result);  
  free(kopie);  
  
  return 0;  
}