更新地图时遇到问题

时间:2011-09-16 15:19:19

标签: c++ map sqlite

我必须映射容器:

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),以查找记录是否在表中。

1 个答案:

答案 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::stringstd::wstring并更喜欢这些对象。混合和匹配字符数组,使用指向数组的指针,使用指向数组的指针的typedef,使用字符串对象,以及混合使用宽字符和多字节字符,这只会引起麻烦。