20

strlen()所属する図書館は?

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

次のコードを試してみましたが、うまくいきます。

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

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

私はstr3 に等しく設定し、正しい答えを 3 にします。

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

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

4

5 に答える 5

19

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

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

C 言語標準では、strlen関数はヘッダー ファイルで宣言されます<string.h>。C++ では、<string.h>場所strlenをグローバル名前空間に含め、<cstring>代わりに場所strlenを名前空間に含めstdます。

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

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

特定のコンパイラとツールチェーンでは、たまたまヘッダー ファイル<iostream>がインクルード<cstring>されます。つまり、前者をインクルードするコードは後者も無料で取得します。これは実装の詳細であり、依存するべきではありません。別のコンパイラでコードをコンパイルすると、突然コンパイラ エラーの海にいることに気付くかもしれません。

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

于 2013-10-01T04:38:38.373 に答える
12

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

#include <cstring>

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

于 2016-03-09T14:04:40.907 に答える
7

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

GNU C ライブラリから

于 2013-10-01T04:13:46.930 に答える
-3
#include <stdio.h>
#include <string.h>

int main(void)
{
    char *string = "Hello World";
    printf("%lu\n", (unsigned long)strlen(string));
    return 0;
}

このプログラムは、文字列 "Hello World" の長さである値 11 を出力します。文字列は、char というデータ型の配列に格納されます。文字列の末尾は、配列内の最初のヌル文字を検索することによって検出されます。

GNU C ライブラリから

于 2013-10-01T04:21:08.850 に答える