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' を見つけます。

したがって、マンページは基本的にコピー&ペーストです。

その上、難読化された必要性のために、2 番目のパラメーターの型intは ですが、実際にはchar. 私は間違っていないと思いますが、なぜそれがintではなく なのか説明してもらえますcharか?

両方が同じである場合、どちらがバージョン間でより互換性があり、そうでない場合、どちらが違いますか?

4

2 に答える 2

27

strchr()C標準ライブラリの一部です。 index()現在非推奨のPOSIX関数です。 POSIX仕様index()では、への呼び出しに展開されるマクロとして実装することを推奨していますstrchr()

index()はPOSIXで非推奨になり、C標準ライブラリの一部ではないため、を使用する必要がありますstrchr()

intこれらの関数は関数プロトタイプよりも前のものであるため、2番目のパラメーターはタイプです。詳細については、https://stackoverflow.com/a/5919802/も参照してください。

于 2010-11-03T21:32:08.597 に答える
2

index() 関数は古いものであり、strchr() に置き換える必要があるようです。http://www.opengroup.org/onlinepubs/000095399/functions/index.htmlを参照してください。インデックスを strchr に置き換え、インデックスをレガシー関数としてマークすることを提案しています。

于 2010-11-03T21:36:44.637 に答える