84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
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 呢?
人生最曼妙的风景,竟是内心的淡定与从容!
はい なし末尾の文字列で strlen を呼び出すことは未定義の動作です。
strlen
先分析您的代コード:
文字列の長さを取得する C 文字列 str の長さを返します。 C 文字列の長さは、終端の null 文字によって決まります。C 文字列は、文字列の先頭と終端の null 文字の間の文字数と同じ長さになります (終端の null 文字自体は含まれません)。 これを文字列を保持する配列のサイズと混同しないでください。例: char mystr[100]="テスト文字列"; はサイズが 100 文字の文字配列を定義しますが、mystr の初期化に使用された C 文字列の長さはわずか 11 文字です。したがって、sizeof(mystr) は 100 と評価されますが、strlen(mystr) は 11 を返します。
文字列の長さを取得する
C 文字列 str の長さを返します。
C 文字列の長さは、終端の null 文字によって決まります。C 文字列は、文字列の先頭と終端の null 文字の間の文字数と同じ長さになります (終端の null 文字自体は含まれません)。
これを文字列を保持する配列のサイズと混同しないでください。例:
char mystr[100]="テスト文字列";
はサイズが 100 文字の文字配列を定義しますが、mystr の初期化に使用された C 文字列の長さはわずか 11 文字です。したがって、sizeof(mystr) は 100 と評価されますが、strlen(mystr) は 11 を返します。
文字配列は文字配列であり、文字列は文字列です。文字列のみが使用可能です、文字配列はこのようには扱われません。これら 3 つのコード スニペットの出力結果はすべてランダムな値である必要があります。strlen が と誤って認識したメモリ オフセットにデータがあるため、読み取った値の数が返されます。バイトが到着しました。
リーリー
はい なし末尾の文字列で
strlen
を呼び出すことは未定義の動作です。先分析您的代コード:
リーリー进一步理解
リーリー リーリーストレン说明
文字配列は文字配列であり、文字列は文字列です。文字列のみが使用可能です、文字配列はこのようには扱われません。これら 3 つのコード スニペットの出力結果はすべてランダムな値である必要があります。strlen が と誤って認識したメモリ オフセットにデータがあるため、読み取った値の数が返されます。バイトが到着しました。
私は反対票を投じられました...私に反対票を投じた人は、配列の長さが文字列の実際の長さよりも長い場合、コンパイラが自動的に追加すると考えているのかもしれません。実際、これはコンパイラの特定の実装に依存しており、C 標準ではこれについて何も述べていません。リーリー