strlen() bei nicht nullterminierter Zeichenkette?

Lesezeit: 2 Minuten

Ist strlen(const char *s) definiert wann s ist nicht nullterminiert, und wenn ja, was gibt es zurück?

  • Fragen Sie sich: Woher soll strlen() wissen, wo Ihr String endet, wenn er nicht nullterminiert ist?

    – DevSolar

    10. März 2009 um 20:50 Uhr

  • Technisch gesehen gibt es keinen C-String, der nicht NUL-terminiert ist, da der NUL-Terminator als Teil des C-Strings definiert ist 🙂

    – fredoverflow

    28. Oktober 2011 um 16:37 Uhr

  • Haben Sie darüber nachgedacht, die Dokumentation zu Rate zu ziehen?

    – Benutzer207421

    27. September 2020 um 3:22 Uhr

  • Wenn Sie die Puffergröße kennen, möchten Sie vielleicht verwenden memchr Stattdessen wird ein Nullzeiger zurückgegeben, wenn kein Nullterminator gefunden wird, oder strnlen, um die maximale Größe der Zeichenfolge zu begrenzen.

    – Phi

    23. Oktober 2021 um 3:10 Uhr

Nein, es ist nicht definiert. Dies kann zu einer Speicherzugriffsverletzung führen, da es weiterzählt, bis es das erste Speicherbyte erreicht, dessen Wert 0 ist.

  • Es kann auch dazu führen, dass Dämonen aus deiner Nase fliegen. catb.org/jargon/html/N/nasal-demons.html

    – Paul Tomblin

    10. März 2009 um 18:02 Uhr

  • Das erklärt meine schmerzenden Nasenlöcher.

    – Techniker

    31. Oktober 2015 um 21:46 Uhr

Aus dem C99-Standard:

Das Strlen Die Funktion gibt die Anzahl der Zeichen zurück, die dem abschließenden Nullzeichen vorangehen.

Wenn kein Nullzeichen vorhanden ist, bedeutet dies, dass das Ergebnis undefiniert ist.

Vielleicht brauchen Sie strengen?

  • Leider ist dies nicht Teil von Standard C.

    – joveha

    12. März 2009 um 15:09 Uhr

Nicht wirklich, und es wird dazu führen schlechte Dinge.

Wenn Ihre Zeichenfolge nicht NUL-terminiert ist, sucht die Funktion weiter, bis sie eine findet.

Wenn Sie Glück haben, führt dies zum Absturz Ihres Programms.

Wenn Sie kein Glück haben, erhalten Sie eine Länge zurück, die größer als erwartet ist, mit vielen „unerwarteten“ Werten darin.

Benutzer-Avatar
Roland Rabien

Es ist nicht definiert. Es verursacht undefiniertes Verhalten, was bedeutet, dass alles passieren kann, höchstwahrscheinlich wird Ihr Programm abstürzen.

Benutzer-Avatar
David Sekunden

Es gibt die Anzahl der gefundenen Zeichen zurück, bevor ‘\0’ gefunden wird.

1368990cookie-checkstrlen() bei nicht nullterminierter Zeichenkette?

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

Privacy policy