我正在處理一段代碼,並且遇到了void pointer和char問題。基本上,在序列化函數中,我們會有一個新的字符。我們需要在buffer
中存儲該字符。這裏是序列化函數的簽名。處理空指針和C++中的字符
void serialize(void *buffer,
//some other inputs here
){
std::string str = "";
/*some code here, store the final output in str first*/
char* charStr = new char[str.size()];
strcpy(charStr,str.c_str());
buffer = static_cast<void*>(charStr);
}
使用這樣的功能,
char buffer[256];
serialize(buffer,
//some other inputs here
);
然而,存儲在buffer
數據將是實實在在的事奇怪。我將簽名中的void指針改爲char指針作爲臨時解決方案。但是,我知道必須有更好的一個。
注意'strcpy'會在字符串的末尾放置一個空終止字符,而不是用'str.size()'計數(所以你會得到一個帶有發佈代碼的緩衝區溢出)。 – SleuthEye 2014-09-11 01:37:24
你知道'buffer = ...'賦值對調用者的參數有絕對的**沒有**效果,對吧? – WhozCraig 2014-09-11 01:39:33
我會改變緩衝區參數的類型爲char *。爲什麼使用void,因爲它確實是一個指向原始內存(字節)的指針?否則,我喜歡扎克的答案。 – 2014-09-11 02:01:33