Wie funktioniert die strlen-Funktion intern?

Lesezeit: 1 Minute

Benutzer-Avatar
Manu

Wie funktioniert strlen() intern arbeiten? Gibt es inhärente Fehler in der Funktion?

Benutzer-Avatar
paxdiablo

strlen funktioniert normalerweise, indem die Zeichen in einer Zeichenfolge gezählt werden, bis a \0 Charakter gefunden. Eine kanonische Implementierung wäre:

size_t strlen (char *str) {
    size_t len = 0;
    while (*str != '\0') {
        str++;
        len++;
    }
    return len;
}

Was mögliche inhärente Fehler in der Funktion betrifft, gibt es keine – sie funktioniert genau wie dokumentiert. Das heißt nicht, dass es keine bestimmten Probleme gibt, nämlich:

  • wenn Sie ihm eine “Zeichenfolge” übergeben, die kein a hat \0 Am Ende kann es zu Problemen kommen, aber technisch gesehen ist das keine C-Saite (a) und selber schuld.
  • du kannst nicht setzen \0 Zeichen in Ihrem String, aber auch in diesem Fall wäre es kein C-String.
  • Es ist nicht der effizienteste Weg – Sie könnten eine Länge im Voraus speichern, um die Länge viel schneller zu erhalten.

Aber das sind keine Fehler, sondern nur die Folgen einer Designentscheidung.

Zu diesem letzten Aufzählungspunkt siehe auch dieser hervorragende Artikel von Joel Spolsky, wo er verschiedene Saitenformate und ihre Eigenschaften bespricht, einschließlich normaler C-Saiten (mit einem Terminator), Pascal-Saiten (mit einer Länge) und der Kombination der beiden nullterminierten Pascal-Saiten.

Obwohl er einen, sagen wir, “farbenfroheren” Begriff für diesen letzten Typ hat, der mir häufig in den Sinn kommt, wenn ich an Pythons hervorragende (und völlig unabhängige) F-Saiten denke 🙂


(a) AC-String ist definiert als eine Reihe von Zeichen ohne Abschlusszeichen (beliebiges Zeichen Sonstiges als \0) gefolgt von einem Terminator. Daher verbietet diese Definition beide eingebetteten Terminatoren innerhalb die Sequenz und Sequenzen ohne so ein Terminator. Oder kurz gesagt (gemäß ISO-C-Standard):

Eine Zeichenfolge ist eine zusammenhängende Folge von Zeichen, die durch das erste Nullzeichen abgeschlossen wird und dieses enthält.

1187250cookie-checkWie funktioniert die strlen-Funktion intern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy