1.strlen関数.
strlen が行うことは単なるカウンターであり、メモリ内の特定の場所から開始されます (文字列の先頭、中間のどこか、または不確実なメモリ領域である可能性があります)、最初の文字列の終了文字 '\0' に遭遇するまでスキャンを開始し、その後 Counter 値を返します。
2.sizeofOperator
sizeof() は、変数が宣言された後に占有されている 番号 を返します。また、sizeof は関数ではなく、単なる演算子です。
3.strlen と sizeof
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.strlen と sizeof
の違いの例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<
以上がsizeof と strlen の解析を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。