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

C:strchr()和index()之间的差异,c,string,standard-library,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) #包括 字符*索引(常量字符*s,整数c) (...) #包括 字符*strchr(常量字符*s,整数c) 所以我好奇地

我正在用C语言做一些需要使用字符串的事情(就像大多数程序一样)

查看手册页,我在字符串(3)处发现:

简介

#include <strings.h>

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

(...)

#include <string.h>

char * strchr(const char *s, int c)
#包括
字符*索引(常量字符*s,整数c)
(...)
#包括
字符*strchr(常量字符*s,整数c)
所以我好奇地看了一下strchr(3)和索引(3)

我发现两者都有以下作用:

函数的作用是:查找字符串中第一个出现的c 由s。终止的空字符被认为是 一串因此,如果c是'\0',函数将定位终止'\0'

因此,手册页基本上是一个复制粘贴

此外,我假设,由于某种模糊的必要性,第二个参数的类型为
int
,但实际上是
char
。我想我没有错,但谁能解释一下为什么它是
int
,而不是
char

如果它们都相同,那么哪个版本更兼容,如果不兼容,区别是什么?

strhr()
是C标准库的一部分
index()
是POSIX规范建议将
index()
实现为一个宏,扩展为调用
strchr()

由于POSIX中不推荐使用
index()
,而不是C标准库的一部分,因此应该使用
strchr()

第二个参数的类型为
int
,因为这些函数早于函数原型。有关这方面的更多信息,请参见。

看起来index()函数是一个较旧的函数,应该用strchr()替换。
查看他们建议用strchr替换index并将index标记为遗留函数的位置。

index()也是C标准库的一部分。但你们都是对的。@ssice:不,不是。“索引”一词在C标准库规范(C99第7条)中的任何地方都没有出现。@ssice:谁说
index()
是C标准库的一部分?@ssice:您的特定标准库实现可能有
index()
函数,但如果有,则是语言扩展
index()
不是C标准库的一部分。@ssice:您可以从中找到语言标准的副本。仅供参考,下面是一些历史: