Básicamente estaba leyendo en ese libro la sección de aritmetica de apuntadores, /capítulo2/página 58 (al menos en mi versión en español) La función que hace (usando aritmetica de apuntadores) para contar los caracteres es así: int strlen(char* p) { int i = 0; while (*p++) i++; return i; } Ahora bien, creo haber entendido a que viene el * en *p++, en definitiva es porque en C++ al final de cada cadena de caracteres hay un "\0" y dicho "\0" evalua falso si se toma como condición. Entonces en definitiva tenes que *p++ (que es lo mismo que decir *(p++) ) toma "\0" cuando esta al final de la cadena lo que hace que salga del while Pero no me doy cuenta porque strlen devuelve, correctamente, 4 (si es evaluado con "hola") con ese código cuando me parece que debería estar devolviendo 3... Digo, si yo le paso "hola" entiendo que lo que pasa es: i=0 "*p++" ahora p apunta a "o" i=1 "*p++" ahora p apunta a "l" i=2 "*p++" ahora p apunta a "a" i=3 ahora "*p++" evalua a falso y sale del bucle return i; 3 ¿Pero sale 4? Y cuando puse un cout en el while para ver que estaba pasando me encuentro con esto o letra 1 l letra 2 a letra 3 letra 4 Es como si el "\0" del final por alguna razón estuviera evaluando true, no lo entiendoEDITADO EL 12-10-2022 / 22:30 (EDITADO 1 VEZ)
El problema era que no estaba teniendo en cuenta el funcionamiento del operador "++" p++ no devuelve la variable p incrementada, sino que devuelve p Entonces, para la primera iteración: *p++ es 'h'
Hay 1 respuestas en Duda sobre strlen C++ libro "El lenguaje de programación C++" (bjarne stroustrup), del foro de Software. Último comentario hace 2 años.