2012-11-18 39 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'來表示數量元素。 –

相關問題