C语言 缓冲区大小不正确



我正在创建以下缓冲区:

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,但这是为什么?

这不是那样工作的

 sizeof(buffer);

返回 buffer 的大小,它是一个指针,而不是一个数组。如果您有如下所示的数组

 char szArray[100];

然后

 sizeof(szArray);

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

因为您打印出了变量缓冲区的大小,它是指向字符缓冲区的指针。指向 char 数组的指针在内存中直接权重为 4 个字节,这就是为什么它会打印给您 4 而不是 1024。

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


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

在这里,我们测量数组的大小,而不是指针。您需要记住,指针的行为类似于数组,但不是数组。实际上,在非常低的级别中,它们看起来是一样的,但是在C级别中存在差异。

最新更新