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 呢?
怪我咯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 を返します。
ringa_lee2017-04-17 15:06:59
文字配列は文字配列であり、文字列は文字列です。文字列のみが使用可能です、文字配列はこのようには扱われません。これら 3 つのコード スニペットの出力結果はすべてランダムな値である必要があります。strlen が と誤って認識したメモリ オフセットにデータがあるため、読み取った値の数が返されます。バイトが到着しました。
私は反対票を投じられました...私に反対票を投じた人は、配列の長さが文字列の実際の長さよりも長い場合、コンパイラが自動的に追加すると考えているのかもしれません。実際、これはコンパイラの特定の実装に依存しており、C 標準ではこれについて何も述べていません。