c - 使用什么来代替 sizeof(void)?

标签 c void-pointers file-copying

我正在尝试复制文件。我正在使用借来的代码片段,其中有一行错误让我感到困惑。

int fileread = open("original.txt", O_RDONLY);
void *buffer;
buffer = malloc(sizeof(void) * size);  /*This line gives "Incomplete type not allowed."*/

int nread = read(fileread,buffer,size);

int filewrite = open("original.txt.backup",O_CREAT | O_RDWR, 0644);

write(filewrite,buffer,size);

close(filewrite);
close(fileread);

我应该用什么来代替?我正在考虑 char*,但我想确保我理解这里发生的过程。

最佳答案

如果你想分配一个size字节的缓冲区,并且让buffer指向它的开头:

void *buffer = malloc(size);
if (buffer == NULL) {
    /* allocation failed */
}
/* ... */

但是如果您想对缓冲区中的数据执行某些操作,则需要具有有效的类型。 unsigned char 数组是管理任意内容缓冲区的常用方法:

unsigned char *buffer = malloc(size);
/* as above */

关于c - 使用什么来代替 sizeof(void)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437434/

相关文章:

c - strcat() 在使用 gcc 的 xcode 中出现问题

我可以仅使用 cast 从 long double 转换为 float/double/int 吗?

c - 多次 fork 离开僵尸和进程挂起后程序控制不返回

c++ - cpp中指针的类型转换

跟踪文件复制的 Java 程序

c - 如何在C程序中检查字符串末尾是否有/字符

c++ - 将地址转换为长变量结果值?

c - 使用类型定义的数据类型取消引用通用指针

c++ - 以极低的资源要求强制复制文件

shell - 如何从 Meson 脚本运行 shell 命令?