【问题标题】:C: Differences between strchr() and index()C: strchr() 和 index() 的区别
【发布时间】:2011-05-04 18:15:14
【问题描述】:

我正在用 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() 函数定位字符串中第一次出现的 c s 所指。终止空字符被认为是 细绳;因此,如果 c 是 '\0',函数会定位到终止的 '\0'。

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

此外,我认为,由于某些混淆的必要性,第二个参数的类型为int,但实际上是char。我想我没有错,但是谁能向我解释为什么它是int,而不是char

如果两者相同,哪个版本更兼容,如果不是,有什么区别?

【问题讨论】:

标签: c string standard-library


【解决方案1】:

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

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

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

【讨论】:

  • index() 也是part of the C standard library 反正。但你们俩都是对的。
  • @ssice:不,不是。 C 标准库规范(C99 的第 7 条)中没有出现“索引”一词。
  • @ssice:谁说index() 是 C 标准库的一部分?
  • @ssice:您的特定标准库实现可能有一个index() 函数,但如果有,它就是一个语言扩展。 index() 不是 C 标准库的一部分。
  • @ssice:你可以得到一份语言标准的副本(你可以从this Stack Overflow question找到如何)。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2018-11-26
    • 2013-06-11
    • 2011-06-05
    • 2023-03-31
    • 2017-02-21
    相关资源
    最近更新 更多