重複の可能性:
文字列リテラルの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