検索

ホームページ  >  に質問  >  本文

C++中数组strlen

char a[] = {'a','b','c'};
cout << strlen(a) << endl;
输出 6

char a[3] = {'a','b','c'};
cout << strlen(a) << endl;
输出 6

char a[4] = {'a','b','c'};
cout << strlen(a) << endl;
输出 3

strlen 会一直往前找直到找到'\0',但是为什么第一第二个会返回 6 呢?
黄舟黄舟2807日前558

全員に返信(4)返信します

  • 迷茫

    迷茫2017-04-17 15:06:59

    はい なし末尾の文字列で strlen を呼び出すことは未定義の動作です。

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 15:06:59

    先分析您的代コード:

    リーリー

    进一步理解

    リーリー リーリー

    ストレン说明

    文字列の長さを取得する

    C 文字列 str の長さを返します。

    C 文字列の長さは、終端の null 文字によって決まります。C 文字列は、文字列の先頭と終端の null 文字の間の文字数と同じ長さになります (終端の null 文字自体は含まれません)。

    これを文字列を保持する配列のサイズと混同しないでください。例:

    char mystr[100]="テスト文字列";

    はサイズが 100 文字の文字配列を定義しますが、mystr の初期化に使用された C 文字列の長さはわずか 11 文字です。したがって、sizeof(mystr) は 100 と評価されますが、strlen(mystr) は 11 を返します。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 15:06:59

    文字配列は文字配列であり、文字列は文字列です。文字列のみが使用可能です、文字配列はこのようには扱われません。これら 3 つのコード スニペットの出力結果はすべてランダムな値である必要があります。strlen が と誤って認識したメモリ オフセットにデータがあるため、読み取った値の数が返されます。バイトが到着しました。

    私は反対票を投じられました...私に反対票を投じた人は、配列の長さが文字列の実際の長さよりも長い場合、コンパイラが自動的に追加すると考えているのかもしれません。実際、これはコンパイラの特定の実装に依存しており、C 標準ではこれについて何も述べていません。

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 15:06:59

    リーリー

    返事
    0
  • キャンセル返事