C++中数组strlen
黄舟
黄舟 2017-04-17 15:04:59
0
4
551
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 呢?
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(4)
迷茫

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

いいねを押す +0
刘奇

先分析您的代コード:

リーリー

进一步理解

リーリー リーリー

ストレン说明

文字列の長さを取得する

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

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

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

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

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

いいねを押す +0
左手右手慢动作

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

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

リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート