gpt4 book ai didi

c++ - 更新 map 时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:35 25 4
gpt4 key购买 nike

我必须映射容器:

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,它仅包含循环结束时查询的最后一条记录。难道我做错了什么?

我正在尝试将所有查询结果存储在 map 中,这样我就可以执行 mymap.find(LPWCH),以查找记录是否在表中。

最佳答案

也许你打算做更像这样的事情:

map<int, std::wstring> mymap;
for(int i(0); i < nrow; ++i)
{
// ...
mymap[i] = somevar;
}

编辑:实际上,您为什么在这里需要一张 map ? std::vector 可能就足够了 将 map 的 keyvalue 设置为临时循环计数值。

编辑#2:实际上我刚刚意识到还有一些疯狂的事情正在发生。首先,您将 char* 转换为 wchar_t*,然后在下一行将其从 wchar_t* 转换回 char*

mbstowcs(somevar, results[X+1], 1024 );
wcstombs(output, somevar, 1024);

这是不必要的。确定您是要使用 std::string 还是 std::wstring 并更喜欢这些对象。混合和匹配字符数组、数组指针、数组指针的类型定义、字符串对象,以及混合宽字符和多字节字符只是自找麻烦。

关于c++ - 更新 map 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com