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?
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 strchr()
.
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 these functions predate function prototypes. See also https://stackoverflow.com/a/5919802/ for more information on this.