Strings in C

Aus dev.kaibel.net
Version vom 6. November 2025, 12:37 Uhr von PhilKa (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Strings in C = '''Strings''' in der Programmiersprache C sind Zeichenketten, die als Arrays von `char` repräsentiert werden und immer durch ein spezielles Nullterminierungszeichen (`'\0'`) abgeschlossen werden. Da C im Gegensatz zu höheren Programmiersprachen keinen eigenen String-Datentyp bereitstellt, müssen Speicherverwaltung und Länge von Strings explizit beachtet werden. == Darstellung von Strings == Ein String ist ein Array von Zeichen: <s…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Strings in C

Strings in der Programmiersprache C sind Zeichenketten, die als Arrays von `char` repräsentiert werden und immer durch ein spezielles Nullterminierungszeichen (`'\0'`) abgeschlossen werden. Da C im Gegensatz zu höheren Programmiersprachen keinen eigenen String-Datentyp bereitstellt, müssen Speicherverwaltung und Länge von Strings explizit beachtet werden.

Darstellung von Strings

Ein String ist ein Array von Zeichen:

char text[] = "Hallo";

Intern sieht das so aus:

'H' 'a' 'l' 'l' 'o' '\0'

Die Nullterminierung (`\0`) markiert das Ende des Strings und ist entscheidend für viele Bibliotheksfunktionen (z. B. `strlen`, `printf`, `strcmp`).

Wichtige Standardfunktionen für Strings

Die Header-Datei `string.h` stellt grundlegende Funktionen bereit:

Funktion Beschreibung
`strlen(s)` Gibt die Länge eines Strings (ohne `\0`) zurück.
`strcpy(dest, src)` Kopiert einen String (ohne Längenprüfung!).
`strncpy(dest, src, n)` Kopiert höchstens n Zeichen.
`strcmp(s1, s2)` Vergleicht zwei Strings lexikographisch.
`strcat(dest, src)` Hängt einen String an einen anderen an.

Ausgabe von Strings mit printf

Die Funktion `printf` (aus `stdio.h`) dient zur Ausgabe formatierter Daten auf der Konsole.

Beispiel

#include <stdio.h>

int main() {
    char name[] = "Alice";
    printf("Hallo %s!\n", name);
    return 0;
}

Das Formatierungssymbol `%s` steht für Strings.

Erstellen formatierter Strings: sprintf und snprintf

sprintf

`sprintf` schreibt einen formatierten String in einen Puffer.

char buffer[50];
sprintf(buffer, "Ergebnis: %d", 42);

Wichtig: `sprintf` führt **keine** Längenprüfung durch → Gefahr von **Buffer Overflows**.

snprintf

`snprintf` ist die sichere Variante und begrenzt die Anzahl der geschriebenen Zeichen.

char buffer[50];
snprintf(buffer, sizeof(buffer), "Ergebnis: %d", 42);

Der String wird automatisch mit `\0` abgeschlossen, solange die Puffergröße > 0 ist.

Vergleich

Funktion Längenprüfung Risiko
`printf` Ausgabe auf Konsole gering
`sprintf` keine hoch (Buffer Overflow)
`snprintf` ja deutlich reduziert

Sichere String-Behandlung

Da C keine automatische Speicherüberwachung bietet, sind folgende Regeln wichtig:

  • Immer Puffergrößen kennen.
  • `snprintf` statt `sprintf` verwenden.
  • Nie ungeprüfte Benutzereingaben direkt kopieren.
  • Bei dynamischer Allokation an `free()` denken.

Beispielprogramm

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

int main() {
    char name[] = "Alice";
    char msg[100];

    snprintf(msg, sizeof(msg), "Hallo %s, willkommen!", name);
    printf("%s\n", msg);

    return 0;
}

Boost.Format (C++)

Während C keine komfortablen Formatierungsmechanismen über `printf` hinaus bietet, stellt die C++-Bibliothek Boost.Format ein flexibles Formatierungssystem bereit, das typsicher und ausdrucksstark ist.

Boost.Format verwendet ein Format ähnlich zu `printf`, aber in **C++-typischer Syntax**:

#include <boost/format.hpp>
#include <iostream>

int main() {
    std::string name = "Alice";
    int score = 42;

    std::cout << boost::format("Name: %1%, Punkte: %2%") % name % score << std::endl;
}

Vorteile gegenüber printf

  • Typprüfung zur Compile-Zeit (vermeidet Formatierungsfehler)
  • Beliebige Datentypen formattierbar (auch Klassen)
  • Lesbarer und wartbarer Code

Nachteile

  • Boost ist eine zusätzliche Abhängigkeit
  • Geringere Performance als `printf` oder `snprintf` in sehr zeitkritischen Bereichen

Zusammenfassung

  • In C sind Strings nullterminierte `char`-Arrays.
  • `printf`, `sprintf` und `snprintf` ermöglichen formatierte Ausgabe bzw. Stringgenerierung.
  • Für sichere Stringmanipulation sollte **immer `snprintf` gegenüber `sprintf` bevorzugt werden**.
  • In C++ bietet `Boost.Format` eine moderne, typsichere Alternative zur Formatierung.

Siehe auch

Weblinks