Ultimamente me he estado pegando con plan9 y he visto el codigo de varias funciones de cadenas del sistema, asi que ahi va una explicación rapida.
strchr: devuelve un puntero a la primera posicion de ch si este está en s1, o NULL si no está.
Lo primero es que si el carácter que estamos buscando es el carácter 0, esto es NULL (en C se pone un NULL al final de cada cadena) entonces lo único que hacemos es avanzar el puntero de la cadena hasta encontrar ese NULL.
char*
strchr(char *s, int c)
{
char c0 = c;
char c1;
if(c == 0){
while(*s++)
;
return s-1;
}
while(c1 = *s++)
if(c1 == c0)
return s-1;
return 0;
}
Como se usa un post incremento s++, hay que devolver s-1 ya que s era NULL y además le hemos avanzado una posición mas.
En caso contrario se va avanzando el puntero de la cadena y a la vez asignándoselo a una variable que se compara con el carácter pedido, si aun así no se ha encontrado se devuelve NULL (0).
Éste código ha salido de plan9
No hay comentarios:
Publicar un comentario