2012-11-18 37 views
0

我试图复制一个文件。我正在使用一个借用的代码片段,并且有一行它会让我感到困惑。用什么来代替sizeof(void)?

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 *,但我想确保我理解这里正在进行的过程。

+0

预留了'无效*'是没有意义的记忆。 – chris

+0

这就是我的想法......但我对C很糟糕。绝对可怕。 – Aerovistae

+0

@chris我刚刚浏览了你的微型生物...为什么我问,你是否有兴趣学习计划?我正在完成你兴奋开始的同一个大学项目,而上帝让我讨厌这个计划。 – Aerovistae

回答

0

sizeof()返回您的类型的大小。老实说,我认为你应该将其更改为

char *buffer; 
buffer = malloc(sizeof(char) * size); 

的sizeof(无效),使零意义

+0

字节是一个定义的类型?我要去char,因为他们是......相当于? – Aerovistae

+0

对不起我的语言混合,是使用字​​符 – Alan

+0

这是哪种语言? – Aerovistae

2

如果你想分配的size字节的缓冲区,并有buffer点到它的开头:

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

但是,如果你想对缓冲区中的数据做些什么,它将需要一个有效的类型。的unsigned char数组是管理的任意内容缓冲区的常用方法:

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

用于'NULL'检查,尽管我仍然更喜欢'malloc(sizeof(* buffer)* size)'以防万一“我们”决定存储更大的数据类型,同时仍希望'size'来表示数量元素。 –

相关问题