我在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
?
如果两者相同,哪一个版本在版本之间更兼容,如果不兼容,哪个不同?
答案 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替换索引并将索引标记为遗留函数。