重複の可能性:
文字列リテラルのSize
私のwindows7mingw環境で、私はこれを試しました:
char str[] = "hello";
の値sizeof(str)は6であり、4または8ではありません。
これはどのように起こりますか?
重複の可能性:
文字列リテラルのSize
私のwindows7mingw環境で、私はこれを試しました:
char str[] = "hello";
の値sizeof(str)は6であり、4または8ではありません。
これはどのように起こりますか?
sizeof(str)終了ヌル文字を含む文字列のバイト数を返します。つまり、配列"hello\0"の6バイトになります。
代わりにあなたが持っていた場合
char* str = "hello";
次に、ポインタsizeof(str)のバイト数を返します(32ビットシステムの場合は4)。 str
あなたはこのSOの質問を見つけるかもしれませんなぜsizeofはCの同じ文字列に対して異なる値を返すのですか?興味を持っている。
strはの配列だからcharsです。sizeof(array)配列が占めるバイト数を示します。strはの配列であるcharsため、各要素は6バイトの場合、ヌル終了文字を含めて1バイトのみです。
:を使用して配列内の要素の数を取得できるため、sizeof(array)/sizeof(array[0])これはより明示的に書くことができます:sizeof(str)/sizeof(str[0])。ただし、strがの配列であるchar場合、これは単なる。と同等ですsizeof(str)。
これは一般的にC文字列には適用されないことに注意してください。文字列の長さには、を使用してstrlenください。例えば:
char *str = "hello";
sizeof(str); // returns 4, since str is declared as char*, not char[]
「sizeof()」演算子はバイト数を返します。文字列の場合、たまたま6文字(5文字とヌルバイト)になります。6要素の整数配列の場合は24です(少なくとも私の32ビットLinuxシステムでは)。また、ポインタの場合は4になります(これも32ビットシステムの場合)。
#include <stdio.h>
int
main (int argc, char *argv[])
{
char str[] = "Hello";
char *s = "Hello";
int a[] = {1, 2, 3, 4, 5, 6};
printf ("sizeof (str)=%d, sizeof(s)=%d, sizseof(a)=%d\n",
sizeof (str), sizeof(s), sizeof(a));
return 0;
}
結果:
sizeof (str)=6, sizeof(s)=4, sizeof(a)=24