Verwendung der Funktion strsep in C

Jinku Hu 12 Oktober 2023
Verwendung der Funktion strsep in C

In diesem Artikel werden mehrere Methoden zur Verwendung der Funktion strsep in C vorgestellt.

Verwenden Sie die Funktion strsep, um das gegebene Token in der Zeichenkette zu finden

Die Funktion strsep ist Teil der String-Utilities der C-Standardbibliothek, die in der Header-Datei <string.h> definiert sind. Sie kann verwendet werden, um Token, die von den angegebenen Begrenzungszeichen umgeben sind, aus dem String-Objekt zu extrahieren.

strsep nimmt zwei Argumente entgegen - Zeiger auf char* und Zeiger auf char. Mit dem ersten Argument wird die Adresse der Zeichenkette übergeben, die durchsucht werden soll. Der zweite Parameter gibt einen Satz von Begrenzungszeichen an, die den Anfang und das Ende der extrahierten Token markieren. Beachten Sie, dass Begrenzungszeichen in den extrahierten Token-Zeichenketten verworfen werden. Wenn das erste Token gefunden wird, wird das erste Argument geändert, um den Zeiger auf das nächste gefundene Begrenzungszeichen zu speichern.

Im folgenden Beispiel wird demonstriert, wie zwei Token, die mit dem angegebenen Zeichen begrenzt sind, mit einem einzigen Aufruf von strsep extrahiert werden. Beachten Sie, dass das Programm die Zeichenkette und das Begrenzungszeichen aus den beiden Befehlszeilenargumenten übernimmt und sich mit einem Fehler beendet, wenn es nicht wie benötigt geliefert wird. Als nächstes duplizieren wir die Zeichenkette mit dem Funktionsaufruf strdupa, da strsep den übergebenen Zeiger modifiziert und wir den ursprünglichen Wert nicht verlieren wollen. strdupa allokiert dynamischen Speicher auf dem Stack, und der Aufrufer sollte den von ihm zurückgegebenen Zeiger nicht freigeben.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
  char *str1, *token;

  if (argc != 3) {
    fprintf(stderr, "Usage: %s string delim\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  str1 = strdupa(argv[1]);
  if (!str1) exit(EXIT_FAILURE);

  token = strsep(&str1, argv[2]);
  if (token == NULL) exit(EXIT_FAILURE);

  printf("extracted: '%s'\n", token);
  printf("left: '%s'\n", str1);

  exit(EXIT_SUCCESS);
}

Beispiel-Befehl:

./program "hello there" t

Ausgabe:

extracted: 'hello '
left: 'here'

Alternativ können wir die for-Schleife implementieren, die die Funktion strsep nacheinander aufruft und jedes Token mit den gegebenen Begrenzungszeichen extrahiert und nicht nur das zuerst gefundene - wie im vorherigen Beispielcode gesehen. Beachten Sie jedoch, dass strsep eine leere Zeichenkette zurückgibt, wenn zwei Begrenzungszeichen in einer Reihe stehen; daher ist der Aufrufer dafür verantwortlich, dies vor der Verarbeitung der Ergebnis-Token zu überprüfen. Eine ähnliche Funktionalität mit leichten Unterschieden bieten auch die Bibliotheksfunktionen strtok und strtok_r, die auf dieser Seite ausführlich beschrieben werden.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
  char *str1, *token;

  if (argc != 3) {
    fprintf(stderr, "Usage: %s string delim\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  str1 = strdupa(argv[1]);
  if (!str1) exit(EXIT_FAILURE);

  for (int j = 1;; j++) {
    token = strsep(&str1, argv[2]);
    if (token == NULL) break;
    printf("%d: '%s'\n", j, token);
  }

  exit(EXIT_SUCCESS);
}

Beispiel-Befehl:

./program "hello there" tl

Ausgabe:

1: 'he'
2: ''
3: 'o '
4: 'here'
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C String