0

重複の可能性:
文字列リテラルのSize

私のwindows7mingw環境で、私はこれを試しました:

char str[] = "hello";

の値sizeof(str)は6であり、4または8ではありません。

これはどのように起こりますか?

4

3 に答える 3

3

sizeof(str)終了ヌル文字を含む文字列のバイト数を返します。つまり、配列"hello\0"の6バイトになります。

代わりにあなたが持っていた場合

char* str = "hello";

次に、ポインタsizeof(str)のバイト数を返します(32ビットシステムの場合は4)。 str

あなたはこのSOの質問を見つけるかもしれませんなぜsizeofはCの同じ文字列に対して異なる値を返すのですか?興味を持っている。

于 2012-08-12T02:58:34.217 に答える
2

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[]
于 2012-08-12T02:59:24.720 に答える
2

「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
于 2012-08-12T03:01:58.913 に答える