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?
Strlen()はどのライブラリに属しますか? cstringに属しますか?または文字列?
どちらでもない。 cstring
とstring
はライブラリではなく、ヘッダーファイルを定義するさまざまな関数およびクラスへのインターフェース。
C言語標準では、strlen
関数はヘッダーファイル_<string.h>
_で宣言されています。 C++では、_<string.h>
_を含めるとstrlen
がグローバル名前空間に配置され、_<cstring>
_を含めるとstrlen
がstd
名前空間に配置されます。
strlen
関数の実際の実装は、C標準ライブラリ(特定のプラットフォームではlibc
またはCRT
)にあります。通常、これはリンク時に実行可能ファイルにリンクされます。
ライブラリ文字列またはcstringを含めずに機能するのはなぜですか?
特定のコンパイラとツールチェーンでは、ヘッダーファイル_<iostream>
_に_<cstring>
_が含まれていることがあります。つまり、前者を含むコードも後者を無料で取得します。これは実装の詳細であり、依存するべきではありません。別のコンパイラでコードをコンパイルすると、突然コンパイラエラーが発生する可能性があります。
適切なことは、ここに_<cstring>
_も含めることです。特定のコンパイラでは必要ではありませんが、他のコンパイラでは必要になる場合があります。
Strlen()を使用するには、cstringヘッダーファイルを含める必要があります。
#include <cstring>
これは私が探していた答えでしたが、ここでは直接的な答えは見つかりませんでした。
関数strlen()は、ヘッダーファイルstring.hで宣言されています