Teilstring holen in C

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion strncpy, um eine Teilzeichenkette in C zu erhalten
  2. Benutzerdefinierte Funktion zum Abrufen von Teilstrings in C verwenden
Teilstring holen in C

Dieser Artikel stellt mehrere Methoden vor, wie man in C eine Teilzeichenkette auslesen kann.

Verwenden Sie die Funktion strncpy, um eine Teilzeichenkette in C zu erhalten

Die Funktion strncpy ist Teil der C-String-Bibliotheksfunktion, die in der Header-Datei <string.h> definiert ist. Sie kopiert die angegebene Anzahl von Bytes von der Quellzeichenkette zum Ziel. strncpy nimmt drei Parameter entgegen - Ziel- char*, Quell-Zeiger und die Ganzzahl, die die Anzahl der zu kopierenden Bytes angibt. Wenn die angegebene Anzahl von Bytes mehr ist, als die Quellzeichenkette enthält, dann werden am Ziel zusätzliche Null-Bytes gespeichert.

Die Funktion strncpy gibt den Zeiger auf die Zielzeichenkette zurück; daher können wir den Aufruf mit der Anweisung printf verketten, um die Teilzeichenkette direkt zu drucken. Das folgende Beispiel zeigt, wie man die erste Teilzeichenkette mit vier Zeichen und dann die nächste Teilzeichenkette mit 10 Zeichen ausgibt.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str) exit(EXIT_SUCCESS);
}

Ausgabe:

This
string lit

Benutzerdefinierte Funktion zum Abrufen von Teilstrings in C verwenden

Alternativ können wir einen benutzerdefinierten Funktions-Wrapper für strncpy definieren und eine neue Schnittstelle mit vier Parametern angeben. Die Funktion getSubstring nimmt die Ziel- und Quellzeichenkette sowie zwei Ganzzahlen entgegen, die die Anfangs- und Endposition der Zeichen angeben, die als TeilZeichenkette benötigt werden. Beachten Sie, dass dieser Funktionsprototyp keine zusätzliche Fehlerprüfung implementiert, sondern direkt den char*-Zeiger zurückgibt, der vom strncpy-Aufruf übergeben wurde.

Ähnlich wie im vorherigen Beispiel kann getSubstring auch als Argument in die Funktion printf eingeklinkt werden. Eine Einschränkung beim strncpy ist, dass sich Ziel- und Quellstring im Speicher nicht überlappen dürfen. Außerdem sollte der Zielzeiger auf einen ausreichend großen Puffer zeigen, um die Quellzeichenkette zu speichern.

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

const char *tmp = "This string literal is arbitrary";

char *getSubstring(char *dst, const char *src, size_t start, size_t end) {
  return strncpy(dst, src + start, end);
}

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", getSubstring(str, tmp, 0, 4));
  printf("%s\n", getSubstring(str, tmp, 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

Ausgabe:

This
string lit
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