Ist strlen(const char *s)
definiert wann s
ist nicht nullterminiert, und wenn ja, was gibt es zurück?
strlen() bei nicht nullterminierter Zeichenkette?
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.
Roland Rabien
Es ist nicht definiert. Es verursacht undefiniertes Verhalten, was bedeutet, dass alles passieren kann, höchstwahrscheinlich wird Ihr Programm abstürzen.
David Sekunden
Es gibt die Anzahl der gefundenen Zeichen zurück, bevor ‘\0’ gefunden wird.
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