使用C++从MongoDb中检索binData记录

问题描述:

有人请指导我一个关于如何使用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

.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)); 

参数iLen实际上是binData(第二)的返回值。你可以像这样提取二进制内容:

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