Jak działa strlen()
wewnętrznie?strlen: jak to działa?
Odpowiedz
strlen
zwykle działa poprzez zliczanie znaków w ciągu znaków aż do znalezienia znaku \0
. Kanoniczne wdrożenie byłoby:
size_t strlen (char *str) {
size_t len = 0;
while (*str != '\0') {
str++;
len++;
}
return len;
}
Nie ma nieodłączny błąd w funkcji, działa dokładnie tak, jak udokumentowane.
To nie znaczy, że nie ma problemów, a mianowicie:
- jeśli przejdzie to „ciąg”, który nie posiada
\0
na końcu, może napotkasz problemy, ale technicznie to nie jest ciąg znaków C (a) i to twoja wina. - Nie można wstawiać znaków
\0
w łańcuchu, ale znowu nie byłby to ciąg znaków C w tym przypadku. - to nie jest najskuteczniejszy sposób - można przechowywać długość z góry, dzięki czemu można uzyskać o wiele szybciej.
Ale żadna z nich nie jest błędem, to tylko konsekwencja decyzji projektowej.
Zobacz również this excellent article przez Joel Spolsky gdzie omawia różne formaty ciągów i ich właściwości, w tym zwykłych ciągów C, ciągi Pascal i kombinacji dwóch, null zakończone ciągi Pascal, choć ma więcej, powiedzmy, " kolorowy”termin dla nich :-)
(a) AC ciąg jest zdefiniowany jako ciąg znaków spoza terminator (czyli każdy inny niż \0
), a następnie przez tego terminatora. Stąd ta definicja uniemożliwia umieszczanie terminatorów w sekwencjach i sekwencjach bez takiego terminatora.
Lub oddanie go bardziej zwięźle (zgodnie z normą ISO):
ciąg jest ciągła sekwencja znaków zakończone i tym pierwszy zerowy charakter.
- 1. Czy "strlen()" w czasie kompilacji działa efektywnie?
- 2. szybszy strlen?
- 3. strlen, mb_strlen, którego użyć?
- 4. @XmlRegistry - jak to działa?
- 5. memory_limit: Jak to działa?
- 6. $ parser.unshift ?? jak to działa?
- 7. Jak to działa javascript?
- 8. aspx.designer.cs jak to działa?
- 9. libunistring u8_strlen() równa się strlen()?
- 10. zrozumienie funkcji strlen w C
- 11. HashMap.this.clear() co to znaczy, jak to działa
- 12. XNA MathHelper.SmoothStep? Jak to działa?
- 13. Jak działa to przypisanie listy?
- 14. wiązania Pythona, jak to działa?
- 15. Jak to działa Kontekst SQLiteOpenHelper
- 16. JPA EntityManager, jak to działa?
- 17. Operator "::" Scali, jak to działa?
- 18. Pakiet mvc4, jak to działa?
- 19. strlen nie podając prawidłowej długości napisu C
- 20. Dlaczego to zamknięcie działa?
- 21. To wydaje się tworzyć obiekt z interfejsu; jak to działa?
- 22. nie ma towarzyszącego wiązania - co to znaczy? Jak to działa?
- 23. co to jest [cmdletbinding()] i jak to działa?
- 24. Co to jest mangling nazw i jak to działa?
- 25. Co to jest de-kompilator, jak to działa?
- 26. stringByAppendingPathComponent, hows to działa?
- 27. Co to jest VertiPaq i jak działa
- 28. Dziedziczenie JavaScript lub jak to działa?
- 29. Laplacian of Gaussian: jak to działa? (OpenCV)
- 30. WCF Ria Services ChangeSet.GetOriginal(): Jak to działa?