Возникли проблемы с обновлением карты - PullRequest
1 голос
/ 16 сентября 2011

Мне нужно сопоставить контейнеры:

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 Ответ

1 голос
/ 16 сентября 2011

Возможно, вы хотели сделать что-то более похожее на это:

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

Редактировать: На самом деле, зачем вам вообще нужна карта здесь?std::vector, вероятно, будет достаточно, поэтому не имеет смысла устанавливать для key или значение карты значение временного числа циклов.

Редактировать # 2: На самом деле я только что понял, что происходит что-то еще безумное.Сначала вы конвертируете из char* в wchar_t*, затем на следующей строке вы конвертируете его обратно из wchar_t* в char*.

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

Это не нужно.Решите, хотите ли вы использовать std::string или std::wstring и предпочитаете эти объекты.Смешивание и сопоставление символьных массивов, с указателями на массивы, с typedefs указателей на массив, со строковыми объектами, а также смешивание широких и многобайтовых символов просто вызывает проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...