web-dev-qa-db-ja.com

どのC ++ヘッダーファイルがstrlenを宣言していますか?

strlen()はどのライブラリに属しますか?

cstringに属しますか?またはstring

私は次のコードを試しましたが、動作します:

include <iostream>
using namespace std;
//withou include<string.h>

int main() {
    char * str="abc";
    cout<<strlen(str);
}

strを3に設定し、正しい答え3を返します。

ライブラリ文字列またはcstringを含めずに機能するのはなぜですか?

そこにcstringまたはstringを含める必要がありますか? string.h?

17
user2756494

Strlen()はどのライブラリに属しますか? cstringに属しますか?または文字列?

どちらでもない。 cstringstringライブラリではなく、ヘッダーファイルを定義するさまざまな関数およびクラスへのインターフェース

C言語標準では、strlen関数はヘッダーファイル_<string.h>_で宣言されています。 C++では、_<string.h>_を含めるとstrlenがグローバル名前空間に配置され、_<cstring>_を含めるとstrlenstd名前空間に配置されます。

strlen関数の実際の実装は、C標準ライブラリ(特定のプラットフォームではlibcまたはCRT)にあります。通常、これはリンク時に実行可能ファイルにリンクされます。

ライブラリ文字列またはcstringを含めずに機能するのはなぜですか?

特定のコンパイラとツールチェーンでは、ヘッダーファイル_<iostream>_に_<cstring>_が含まれていることがあります。つまり、前者を含むコードも後者を無料で取得します。これは実装の詳細であり、依存するべきではありません。別のコンパイラでコードをコンパイルすると、突然コンパイラエラーが発生する可能性があります。

適切なことは、ここに_<cstring>_も含めることです。特定のコンパイラでは必要ではありませんが、他のコンパイラでは必要になる場合があります。

18
Adam Rosenfield

Strlen()を使用するには、cstringヘッダーファイルを含める必要があります。

#include <cstring>

これは私が探していた答えでしたが、ここでは直接的な答えは見つかりませんでした。

10
MBI

関数strlen()は、ヘッダーファイルstring.hで宣言されています

GNU Cライブラリから

7
slash28cu