2013-12-11 26 views
0

我有一個函數,它將一個void *緩衝區作爲參數,並且必須將它傳遞給另一個帶有unsigned char *的函數。下面是一連串事件:指針行爲奇怪的情況從無效*到無符號字符*

unsigned char data[4]; 
populate(&data); 

void populate (void * buf) 
{ 
... 
    unsigned char * datump = ((unsigned char *)buf); 
    if (Unwrap(datump)) 
    {...} 
} 

bool Unwrap (unsigned char* buf) 
{ 
... 
} 

當我繼續前進,這樣做:不折((無符號字符*)BUF)時,出現「無匹配的函數調用來解開[(無符號字符*) 但如果我使用像我在代碼中的轉換,它的工作原理!爲什麼是這樣的?

現在的問題是我現在必須做一些事情(請幫助這個請!)將數據從無符號char *複製到void *。

任何幫助都不勝感激

+1

我不明白爲什麼它不應該與演員合作。這似乎很奇怪。 –

+1

嘗試不使用''數據'的'&'from。 'data ==&data [0]'。 –

+1

在代碼中顯示失敗的上下文。指定是否使用C或C++進行編譯。什麼是'['in'Unwrap [(unsigned char *)「,是一個錯字?什麼_other_ typos? – chux

回答

1

請注意,當你做

unsigned char data[4]; 
populate(&data); 

你傳遞一個char**populate。當您嘗試進行轉換時(除了您指向內存中的某個隨機位置這一事實外),這會造成難以解決的問題。

第一部分解決:

populate(data); 

下面的非常簡單的代碼編譯和運行得很好:

#include <iostream> 

bool f1(unsigned char* buf) { 
    return true; 
} 

void populate(void *buf) { 
    unsigned char* datump = (unsigned char*) buf; 
    if(f1(datump)) std::cout << "it's true!" << std::endl; 
} 
int main(void) { 
    unsigned char data[4]; 
    populate(data); 
} 

似乎是所有需要修復的指針?

1

也許你應該在使用之前聲明Unwrapdata是數組的地址,&data[0]是第一個元素的地址。它是平等的,但意義不同。

+0

它實際上是在頭文件中聲明的。 – user3085057

相關問題