C:strchr()和index()之间的差异

时间:2010-11-03 21:30:11

标签: c string standard-library

我在C中做了一些需要使用字符串的东西(就像大多数程序一样)。

查看联机帮助页,我发现,在字符串(3)处:

  

概要

#include <strings.h>

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

(...)

#include <string.h>

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

所以我好奇地看着strchr(3)和index(3)......

我发现两者都做了以下事情:

  

strchr()/ index()函数定位字符串中第一次出现的c   s指出。终止空字符被认为是其中的一部分   串;因此,如果c为'\ 0',则函数定位终止'\ 0'。

因此,该联机帮助页基本上是一个副本&amp;糊。

此外,我认为,由于某些模糊的必要性,第二个参数的类型为int,但实际上是char。我想我没错,但任何人都可以向我解释为什么它是int,而不是char

如果两者相同,哪一个版本在版本之间更兼容,如果不兼容,哪个不同?

2 个答案:

答案 0 :(得分:23)

strchr()是C标准库的一部分。 index()a now deprecated POSIX function. POSIX规范建议将index()实施为扩展为strchar()调用的宏。

由于index()在POSIX中已弃用且不属于C标准库,因此您应使用strchr()

第二个参数的类型为int,因为在C中,字符常量(如'a')的类型为int

答案 1 :(得分:2)

看起来index()函数是较旧的函数,应该由strchr()替换。 请参阅http://www.opengroup.org/onlinepubs/000095399/functions/index.html他们建议用strchr替换索引并将索引标记为遗留函数。