我必须映射容器:
map<string, char *> mOServs;
map<LPWCH, int> mymap;
我执行sqlite3查询并尝试使用结果更新这两个地图:
sprintf_s(query,1024,"SELECT oservname FROM OServs;");
rc = sqlite3_get_table(db, query, &results, &nrow, &ncol, &zErrMsg);
cout << "query: " << query << endl;
if (rc != SQLITE_OK) {
fprintf(stderr, "Error Selecting oserv name: %s\n", zErrMsg);
sqlite3_free_table(results);
sqlite3_close(db);
return -1;
}
int X = 0;
WCHAR somevar[1024];
while(X < nrow)
{
mbstowcs(somevar, results[X+1], 1024 );
wcstombs(output, somevar, 1024);
mOServs[output] = "offline";
mymap[somevar] = X;
X++;
}
不知何故mOServs似乎填充正确,但是使用mymap,它只包含循环结束时查询的最后一条记录。难道我做错了什么?
我正在尝试将所有查询结果存储在地图中,因此,我可以执行mymap.find(LPWCH),以查找记录是否在表中。
答案 0 :(得分:1)
也许你打算做更像这样的事情:
map<int, std::wstring> mymap;
for(int i(0); i < nrow; ++i)
{
// ...
mymap[i] = somevar;
}
修改:实际上为什么你需要一张地图呢? std::vector
可能就足够了,将地图的键或值设置为临时循环计数值没有多大意义。< / p>
编辑#2:其实我刚刚意识到其他事情正在疯狂发生。首先,您将char*
转换为wchar_t*
,然后在下一行将其从wchar_t*
转换回char*
。
mbstowcs(somevar, results[X+1], 1024 );
wcstombs(output, somevar, 1024);
这是不必要的。确定您是否要使用std::string
或std::wstring
并更喜欢这些对象。混合和匹配字符数组,使用指向数组的指针,使用指向数组的指针的typedef,使用字符串对象,以及混合使用宽字符和多字节字符,这只会引起麻烦。