2012-07-30 21 views
2

有人請指導我一個關於如何使用C++從MongoDb中檢索binData記錄的例子嗎?
我嘗試這樣的代碼,但返回的垃圾:使用C++從MongoDb中檢索binData記錄

char* arrS; 

while (dbResult->more()) 
{ 
    record = dbResult->next(); 
    strcpy(arrS, record.getField("s").binData(iLen)); 
} 

「S」 是我binData場。 在此先感謝您,任何建議都非常感謝。

+0

'arrS'指向'strcpy'操作之前的任何有效內存位置嗎?我相信你知道緩衝區溢出。 – Mahesh 2012-07-30 17:32:17

回答

-1

.binData()返回一個const char *,所以它應該返回一個指向二進制數據的指針。您只需將其複製到緩衝區中,可以是明確分配的,也可以是動態的,如字符串。

例如。

std::string arrS; 
int iLen = 0; 
arrS = record.getField("s").binData(iLen); 

我不知道的艾朗參數的 - 通常此圖案用於在緩衝器長度的值來傳遞和返回複製的字節數,但docs don't mention it

如果是這樣,你需要分配一個緩衝區:

char arrS[1000]; 
int iLen = sizeof(arrS); 
memcpy(arrS, record.getField("s").binData(iLen)); 
0

參數iLen實際上是binData(第二)的返回值。你可以像這樣提取二進制內容:

int iLen; 
const char* p = record["s"].binData(len); 
std::string content(p, iLen);