17

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

查看联机帮助页,我在 string(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() 函数在 s 指向的字符串中定位 c 的第一次出现。终止空字符被认为是字符串的一部分;因此,如果 c 是 '\0',则函数定位终止的 '\0'。

因此,联机帮助页基本上是复制和粘贴。

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

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

4

2 回答 2

27

strchr()是 C 标准库的一部分。 index()一个现已弃用的 POSIX 函数。 POSIX 规范建议实现index()为扩展为调用strchr().

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

第二个参数是类型int,因为这些函数早于函数原型。有关这方面的更多信息,另请参阅https://stackoverflow.com/a/5919802/

于 2010-11-03T21:32:08.597 回答
2

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

于 2010-11-03T21:36:44.637 回答