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'
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