声明一系列空洞

cha*_*one 4 c memory

我正在编写一个复制文件的程序.我使用了一个缓冲区来存储read()函数提供的信息,然后将这些数据提供给write()函数.我用过这个宣言:

static void buffer[BUFFER_SIZE];
Run Code Online (Sandbox Code Playgroud)

问题是我得到了错误error: declaration of ‘buffer’ as array of voids.

我不明白为什么声明一个void数组是一个错误.如何在没有特定类型的情况下声明内存块?

Jen*_*ens 10

您无法声明数组的技术原因void是这void是一个无法完成不完整类型.必须知道数组元素的大小,但void类型没有大小.请注意,您同样无法声明void对象,如

void foo;
Run Code Online (Sandbox Code Playgroud)

请注意,指向void的指针具有特定的大小,这就是原因

void *foo;
Run Code Online (Sandbox Code Playgroud)

既有效,也有效,sizeof(foo)sizeof(*foo)无效.

对于通用内存缓冲区,请使用plain char或者数组unsigned char.char当我需要将指针传递给str* 函数族时,我通常更喜欢普通的,其中数组unsigned char会导致对不兼容指针的诊断.


cni*_*tar 5

使用数组charunsigned char代替.