ホームページ  >  記事  >  運用・保守  >  sizeof と strlen の解析を行う方法

sizeof と strlen の解析を行う方法

王林
王林転載
2023-05-27 12:05:221305ブラウズ

1.strlen関数.

strlen が行うことは単なるカウンターであり、メモリ内の特定の場所から開始されます (文字列の先頭、中間のどこか、または不確実なメモリ領域である可能性があります)、最初の文字列の終了文字 '\0' に遭遇するまでスキャンを開始し、その後 Counter 値を返します

2.sizeofOperator

sizeof() は、変数が宣言された後に占有されている 番号 を返します。また、sizeof は関数ではなく、単なる演算子です。

3.strlensizeof

3.1## の違い# sizeof はパラメータとして type を使用できますが、strlen はパラメータとして char* のみを使用でき、''\0'' で終わる必要があります。

3.2 sizeof は、関数をパラメーターとして使用することもできます (例: short f(); printf("%d\n", sizeof(f())); 出力結果は次のようになります。 sizeof (short)、つまり 2。

3.3 配列 sizeof のパラメーターは縮退せず、strlen に渡されるときにポインターに縮退します。

3.4 ほとんどのコンパイラーは、コンパイル時に変数の型または長さである sizeof を計算します。これが、sizeof(x) を使用して配列の次元を定義できる理由です。

3.5 strlen の結果は実行時にのみ計算できます。型が占有するメモリのサイズではなく、文字列の長さを計算するために使用されます。

3.6 sizeof の後に、型の場合は括弧を追加する必要がありますが、変数名の場合は括弧を追加する必要はありません。これは、sizeof が関数ではなく演算子であるためです。

4.strlensizeof

の違いの例

1.char str[20]="0123456789";

int a=strlen(str); //a=10; >>>> strlen は文字列を計算します長さは、文字列としてターミネータ 0x00 で終わります。

int b=sizeof(str); //b=20; >>>> sizeof は、割り当てられた配列 str[20] によって占有されるメモリ空間のサイズを計算します。内部に保存されているコンテンツの変更。

2.上記は静的配列を処理した結果です。ポインタの場合は結果が異なります

char* ss = " 0123456789";

sizeof(ss) 結果 4 ===》ss は文字列定数を指す文字ポインタです。sizeof はポインタが占めるスペースを取得します。 be これは長整数なので、4

となり、sizeof(*ss) の結果は 1 ===》*ss は最初の文字です。実際には、次の最初の '0' です。取得された文字列。メモリ空間は char 型で、1 ビットを占有します。

strlen(ss)= 10 >>>> この文字列の長さを取得したい場合は、次のようにする必要があります。ストレンを使います。 sizeof 関数は、メモリ内でパラメータによって占有されているバイト数を返します。一方、strlen 関数は、パラメータが指す文字列内の文字数を返します。

3.sizeof を使用する場合、非常に特殊な状況が発生します。つまり、配列名がポインターに変換されます。

char Array[3] = { '0'} ;

sizeof(Array) == 3;

char *p = Array;

strlen (p) = = 1; //sizeof(p) の結果は 4

配列名を関数に渡すと、完全にポインタに縮退してしまいます

4. メモリ完了

class XXX

#{

int i;

int j;

char k;

};

XX x;

cout<

cout<

記憶の完成は、筆記面接でテストするのが比較的簡単な知識ポイントです

以上がsizeof と strlen の解析を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。