缓冲区大小不正确

时间:2012-11-15 18:53:19

标签: c malloc buffer

我正在创建以下缓冲区:

char *buffer;
int buffer_size = 1024;
buffer = (char*) ( malloc(buffer_size * sizeof(char) );

然后当我这样做时:

int actual_size = sizeof(buffer);
printf("Size: %d", actual_size);

它的印刷品是:

size: 4

虽然我希望它是1024,但为什么会这样?

3 个答案:

答案 0 :(得分:3)

这不像那样

 sizeof(buffer);

返回buffer的大小,这是一个指针,而不是一个数组。如果你有一个如下的数组

 char szArray[100];

然后

 sizeof(szArray);

将返回100,因为szArray是一个数组,但指针不是数组。

答案 1 :(得分:0)

因为你打印出变量 buffer 的大小,它是一个指向缓冲区的字符的指针。 指向char数组的指针直接在内存中加权4个字节,这就是它打印给你4而不是1024的原因。

答案 2 :(得分:0)

在你的情况下sizeof(buffer)是指针的大小,因此32位机器上的结果是64位机器中的4是8。


char arr[1024];
int size = sizeof(arr); //=1024

这里我们测量数组的大小,而不是指针。你需要记住指针就像数组一样,但不是数组。实际上,在非常低的水平,它们看起来是一样的,但是在C水平上存在差异。