2010-11-03 16 views
14

Estoy haciendo algo en C que requiere el uso de las cadenas (como lo hacen la mayoría de los programas).C: Diferencias entre strchr() y el índice()

Buscando en las páginas de manual, encontré, en cadena (3):

SINOPSIS

#include <strings.h> 

char * index(const char *s, int c) 

(...) 

#include <string.h> 

char * strchr(const char *s, int c) 

Así que, curiosamente miraba tanto strchr (3) y el índice (3) ...

Y encontré que ambos hacen lo siguiente:

La función strchr()/index() localiza la primera aparición de c en la cadena apuntada por s. El carácter nulo de terminación se considera parte de la cadena ; por lo tanto, si c es '\ 0', las funciones ubican la terminación '\ 0'.

Por lo tanto, la página de manual es básicamente una copia & pegar.

Además, supongo que, debido a alguna necesidad ofuscada, el segundo parámetro tiene el tipo int, pero es, de hecho, un char. Creo que no estoy equivocado, pero ¿alguien puede explicarme por qué es un int, no un char?

Si son las mismas, ¿cuál es más compatible con las versiones ?, y si no, ¿cuál es la diferencia?

+0

FYI, aquí hay un poco de historia: http://groups.google.com/group/net.micro.att/msg/4c277db8350decaa?hl=en –

Respuesta

20

strchr() es parte de la biblioteca estándar C. index() es a now deprecated POSIX function. La especificación POSIX recomienda implementar index() como una macro que se expande a una llamada al strchar().

Dado que index() está en desuso en POSIX y no forma parte de la biblioteca estándar C, debe usar strchr().

El segundo parámetro es del tipo int porque en C, las constantes de caracteres (como 'a') son del tipo int.

+0

index() también es 'parte del estándar C biblioteca' de todos modos. Pero ambos tienen razón. – ssice

+3

@ssice: No, no lo es. La palabra "índice" no aparece en ninguna parte de la especificación de la biblioteca estándar C (cláusula 7 de C99). –

+2

@ssice: ¿quién dice 'index()' es parte de la biblioteca estándar C? –