¿Por qué reimplement strlen como loop + sustracción?
Inspirado poresta pregunt sobre el siguiente código de SQLite3:
static int strlen30(const char *z){
const char *z2 = z;
while( *z2 ){ z2++; }
return 0x3fffffff & (int)(z2 - z);
}
que se acompaña de unacommitir mensaje decir que esta función ayuda conint
desbordamientos.
Estoy particularmente interesado en esta parte:
const char *z2 = z;
while( *z2 ){ z2++; }
to me avanza este buclez2
hastaz2
apunta al terminador nulo. Luegoz2-z
produce la longitud de la cadena.
Por qué no usarstrlen()
para esta parte y reescribir así:
return 0x3fffffff & (int)(strlen(z));
Por qué usar bucle + resta en lugar destrlen()
? ¿Qué puede hacer loop + resta hacer lo questrlen()
no puede