Как я могу добавлять значения в 2D векторной станд :: вектор < станд :: вектор>push_back на 2D станд :: вектор <станд :: вектор <char*>> значение из всех значений одинаковы
Я используя этот код, но элементы, полученные внутри vetore, одинаковы. В то время как данные из queriying db варьируются.
std::vector< std::vector<char*> > results;
char *dataTemp = new char[128];
sqlite3_stmt *statement;
int rc = sqlite3_prepare_v2(m_pDbFile, sql, -1, &statement, 0);
if(rc == SQLITE_OK)
{
int cols = sqlite3_column_count(statement);
int result = 0;
int count = 0;
while(true)
{
result = sqlite3_step(statement);
if(result == SQLITE_ROW)
{
std::vector<char*, std::allocator<char*>> values;
for(int col = 0; col < cols; col++)
{
char* value = (char*)sqlite3_column_text(statement, col);
values.push_back((char*)sqlite3_column_text(statement, col));
}
results.push_back(values);
}
else
{
break;
}
count++;
}
sqlite3_finalize(statement);
}
Вы сохраняете 'char *'. В SQLite нет никакой гарантии, что буфер, на который он ссылается, не будет использоваться повторно при следующей выборке. Если вы хотите сохранить эти данные *, вам нужно сделать копию ранее (используйте 'std :: string', btw, что, как указал Мохит, сделает ваш код« просто »« работает »). Из документации SQLite: «Возвращенные указатели действительны до тех пор, пока не произойдет преобразование типа, как описано выше, или пока не будут вызываться sqlite3_step() или sqlite3_reset() или sqlite3_finalize().» – WhozCraig