¿Cómo funciona strlen()
internamente?strlen: ¿cómo funciona?
Respuesta
strlen
generalmente funciona contando los caracteres en una cadena hasta que se encuentre un carácter \0
. Una implementación canónica sería:
size_t strlen (char *str) {
size_t len = 0;
while (*str != '\0') {
str++;
len++;
}
return len;
}
No hay ningún error inherente en la función, funciona exactamente como está documentado.
Eso no quiere decir que no tiene problemas, a saber:
- si se le pasa una "cadena" que no tiene un
\0
al final, es posible que encuentre problemas, pero técnicamente , esa no es una cadena C (a) y es tu culpa. - no puede poner
\0
caracteres en su cadena pero, de nuevo, no sería una cadena C en ese caso. - no es la manera más eficiente: puede almacenar un largo por adelantado para que pueda obtener la longitud mucho más rápido.
Pero ninguno de esos son errores, solo son consecuencias de una decisión de diseño.
Véase también this excellent article por Joel Spolsky donde discute varios formatos de cuerda y sus características, incluyendo cuerdas C normales, cuerdas Pascal y la combinación de las dos cuerdas Pascal con terminación nula, aunque tiene una más, digamos, " colorido" plazo para ellos :-)
(a) cadena AC se define como una serie de caracteres que no son de terminador (es decir, cualquier otra que \0
) seguido de que terminador. Por lo tanto, esta definición no permite los dos terminadores incorporados dentro de la secuencia y las secuencias sin dicho terminador.
O, dicho de forma más sucinta (según la norma ISO):
Una cadena es una secuencia contigua de caracteres terminadas por e incluyendo el primer carácter nulo .
- 1. ¿Por qué no me funciona el strlen?
- 2. strlen, mb_strlen, ¿cuál usar?
- 3. Sizeof vs STRLEN
- 4. strlen() implementación en gcc
- 5. strlen más rápido?
- 6. Pregunta de strlen rápido
- 7. strlen() y codificación UTF-8
- 8. Complejidad algorítmica de la función PHP strlen()
- 9. ¿Cómo encontrar longitud de cadena en php sin usar strlen()?
- 10. C++ 11 char16_t strlen-equivalent function
- 11. diferencia entre sizeof y strlen en c
- 12. cadenas de C, strlen y Valgrind
- 13. ¿Es eficaz el tiempo de compilación "strlen()"?
- 14. ¿Hay una versión segura de strlen?
- 15. entender la función strlen en C
- 16. cómo encontrar la longitud de cadena usando STRLEN en Objective C
- 17. strlen() en cadena de caracteres no terminada en nulo?
- 18. ¿Existe alguna diferencia entre strlen() == 0 y empty()?
- 19. Seleccionar filas de la base de datos por strlen
- 20. ¿Cuántas veces se llamará a strlen() en este ciclo for?
- 21. strlen no se ha declarado en este ámbito - C++
- 22. ¿Cómo funciona este "retraso" funciona
- 23. ¿Cómo funciona Arrays.asList (...). Contiene (...) funciona?
- 24. Smarty obteniendo subcadena de var con strpos como inicio y strlen como final
- 25. ¿Cómo funciona OfType <T>() ¿Funciona?
- 26. ¿cómo funciona {} mientras (0) funciona en macro?
- 27. ¿Cómo funciona `if (Test-Path ...)` realmente funciona?
- 28. ¿Cómo funciona exactamente si ($ variable) funciona?
- 29. Scrapy BaseSpider: ¿Cómo funciona?
- 30. ¿Cómo funciona Drupal?