2010-11-03 19 views
14

Sto facendo qualcosa in C che richiede l'uso delle stringhe (come la maggior parte dei programmi).C: differenze tra strchr() e index()

Guardando nelle pagine di manuale, che ho trovato, a stringa (3):

SINOSSI

#include <strings.h> 

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

(...) 

#include <string.h> 

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

Così ho con curiosità guardato sia strchr (3) e l'indice (3) ...

E ho trovato che entrambi fanno quanto segue:

La funzione strchr()/index() individua la prima occorrenza di c nella stringa puntata da s. Il carattere null terminante è considerato parte della stringa ; quindi se c è '\ 0', le funzioni individuano il terminante '\ 0'.

Quindi la pagina di manuale è fondamentalmente una copia & incolla.

Inoltre, suppongo che, a causa di alcune necessità occulte, il secondo parametro abbia il tipo int, ma sia, di fatto, un char. Penso di non sbagliarmi, ma qualcuno può spiegarmi perché è uno int, non uno char?

Se sono entrambi uguali, quale è più compatibile tra le versioni e, in caso contrario, qual è la differenza?

+0

FYI, ecco un po 'di storia: http://groups.google.com/group/net.micro.att/msg/4c277db8350decaa?hl=it –

risposta

20

strchr() fa parte della libreria standard C. index() è a now deprecated POSIX function. La specifica POSIX consiglia di implementare index() come macro che si espande in una chiamata a strchar().

Poiché index() è deprecato in POSIX e non fa parte della libreria standard C, è necessario utilizzare strchr().

Il secondo parametro è di tipo int perché in C, le costanti di carattere (come 'a') sono di tipo int.

+0

index() è anche 'parte dello standard C libreria comunque. Ma hai entrambi ragione. – ssice

+3

@ssice: no, non lo è. La parola "indice" non appare da nessuna parte nelle specifiche della libreria standard C (clausola 7 di C99). –

+2

@ssice: chi dice 'index()' fa parte della libreria standard C? –