ssice ssice - 23 days ago 6
C Question

C: Differences between strchr() and index()

I am doing something in C which requires use of the strings (as most programs do).

Looking in the manpages, I found, at string(3):


SYNOPSIS

#include <strings.h>

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

(...)

#include <string.h>

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



So I curiously looked at both strchr(3) and index(3)...

And I found that both do the following:


The strchr()/index() function locates the first occurrence of c in the string
pointed to by s. The terminating null character is considered to be part of the
string; therefore if c is '\0', the functions locate the terminating '\0'.


So, the manpage is basically a copy & paste.

Besides, I suppose that, because of some obfuscated necessity, the second parameter has type
int
, but is, in fact, a
char
. I think I am not wrong, but can anyone explain to me why is it an
int
, not a
char
?

If they are both the same, which one is more compatible across versions, and if not, which's the difference?

Answer

strchr() is part of the C standard library. index() is a now deprecated POSIX function. The POSIX specification recommends implementing index() as a macro that expands to a call to strchar().

Since index() is deprecated in POSIX and not part of the C standard library, you should use strchr().

The second parameter is of type int because in C, character constants (like 'a') are of type int.