gpt4 book ai didi

c++ - push_back on 2D std::vector< std::vector> value made all the values are the same

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:43 25 4
gpt4 key购买 nike

如何在二维 vector 中添加值 std::vector< std::vector >

我正在使用这段代码,但 vetore 中的项目结果是相同的。而数据库查询的数据是多种多样的。

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);
}

最佳答案

问题
sqlite3_column_text 返回的指针(C 类型字符串)可能会在后续调用 sql API 后失效/重用。所以你应该保留内容而不是保存指针本身。

解决方案
在您的代码中进行以下 3 处更改。

#include <string>  // 1
...
std::vector< std::vector<std::string> > results; // 2
...
std::vector<std::string> values; // 3
for(int col = 0; col < cols; col++)
{
const char* value = (char*)sqlite3_column_text(statement, col); // Optional
values.push_back(value); // Optional
}
...

关于c++ - push_back on 2D std::vector< std::vector<char*>> value made all the values are the same,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28163125/

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