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

ssi*_*ice 15 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)
Run Code Online (Sandbox Code Playgroud)

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

我发现两者都做到了以下几点:

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

因此,该联机帮助页基本上是一个复制和粘贴.

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

如果它们都是相同的,哪一个在版本之间更兼容,如果不兼容,哪个区别?

Jam*_*lis 23

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

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

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

  • @ssice:你得到一份语言标准的副本(你可以从[这个Stack Overflow问题]中找到答案(http://stackoverflow.com/questions/81656/where-do-i-find-the-current- C-或-C标准的文档)). (4认同)
  • @ssice:不,不是."索引"一词不会出现在C标准库规范中的任何地方(C99第7条). (3认同)
  • @ssice:谁说`index()`是C标准库的一部分? (2认同)
  • @ssice:您的特定标准库实现可能有一个`index()`函数,但如果是,它是一个语言扩展.`index()`不是C标准库的一部分. (2认同)