Español (ES)
Usuario anónimo
Iniciar sesión | Regístrate gratis
Foro de Software

Responder / Comentar
Foro Software
Por Anonimox46
Hace 1 año / Respuestas: 1 / Lecturas: 3733

Duda sobre strlen C++ libro "El lenguaje de programación C++" (bjarne stroustrup)

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 entiendo
EDITADO EL 12-10-2022 / 22:30 (EDITADO 1 VEZ)
Anonimox46Hace 1 año1
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'
Responder / Comentar
Subir
Foros > Software > Duda sobre strlen C++ libro "El lenguaje de programación C++" (bjarne stroustrup)

Hay 1 respuestas en Duda sobre strlen C++ libro "El lenguaje de programación C++" (bjarne stroustrup), del foro de Software. Último comentario hace 1 año.

  • Regístrate

  • Información legal
Juegos© Foro 3DJuegos 2005-2024. . SOBRE FORO 3DJUEGOS | INFORMACIÓN LEGAL