如何使用 sqlite3 c++ 将整数转换为字符串
How to convert integer to string using sqlite3 c++
我正在尝试将整数数据转换为字符串,但出现错误cannot convert 'int*' to 'const char*' for argument '2' to 'char* strcat(char*, const char*)'
嘿伙计们请解决这些问题,我哪里做错了?
#include <iostream>
using namespace std;
#include "sqlite3.h"
#include<string.h>
#include <sstream>
#define STRING_MAX 32
typedef struct metadata_t
{
char session_username[256];
int user_id[256];
int session_id[256];
char buffer[256];
}metadata_t;
void insertdata1(metadata_t *data);
int main (int argc, const char * argv[])
{
struct metadata_t *data;
cin >> *data->user_id;
cin >> data->session_username;
cin >> *data->session_id;
cin >> data->buffer;
insertdata1(data);
}
void insertdata1(metadata_t *data)
{
// char *buff1,*buff2;
sqlite3 *db;
sqlite3_open("test1.db", & db);
string createQuery = "CREATE TABLE IF NOT EXISTS items (user_id INTEGER PRIMARY KEY, session_username TEXT,Session_id INTEGER,buffer TEXT,));";
sqlite3_stmt *createStmt;
cout << "Creating Table Statement" << endl;
sqlite3_prepare(db, createQuery.c_str(), createQuery.size(), &createStmt, NULL);
cout << "Stepping Table Statement" << endl;
if (sqlite3_step(createStmt) != SQLITE_DONE) cout << "Didn't Create Table!" << endl;
//itoa(*data->userid,buff1,10); // not work
//itoa(*data->userphone,buff2,10);// Integer to String Conversion
/* std::string ss;
ss << *data->user_id;
ss << *data->session_id;
std::string user_Id = ss.str();
std::string session_Id = ss.str(); */ // not working
char *a="(";
char *d=")";
char *b="'";
char *c=",";
char str1[1000];
char * str2 = "";
char * g = ";";
strcpy(str1, "INSERT INTO items (user_id,session_username,session_id,buffer)VALUES");
strcat(str1,a);
strcat(str1,b);
strcat(str1,data->user_id);
strcat(str1,b);
strcat(str1,c);
strcat(str1,b);
strcat(str1,data->session_username);
strcat(str1,b);
strcat(str1,c);
strcat(str1,b);
strcat(str1,data->session_id);
strcat(str1,b);
strcat(str1,c);
strcat(str1,b);
strcat(str1,data->buffer);
strcat(str1,b);
strcat(str1,d);
strcat(str1,g);
std::string insertQuery = str1; // WORKS!
sqlite3_stmt *insertStmt;
cout << "Creating Insert Statement" << endl;
sqlite3_prepare(db, insertQuery.c_str(), insertQuery.size(), &insertStmt, NULL);
cout << "Stepping Insert Statement" << endl;
if (sqlite3_step(insertStmt) != SQLITE_DONE) cout << "Didn't Insert Item!" << endl;
}**
建议使用std::ostringstream
(您需要#include <sstream>
)来构造查询:
std::ostringstream str1;
str1 << "INSERT INTO items (user_id,session_username,session_id,buffer)VALUES"
<< a
<< b // and so on
<< g;
const std::string insertQuery = str1.str();
以下内容不分配任何内存,而只是声明一个指针(C++中不需要struct
):
struct metadata_t *data;
任何取消引用它的尝试都会导致未定义的行为,很可能是分段错误:
cin >> *data->user_id;
只需在堆栈上声明它:
metadata_t data;
并将其地址(或通过引用传递)传递给insertdata1()
:
insertdata1(&data);
更喜欢std::string
而不是char*
或char[]
:
struct metadata_t
{
std::string session_username;
int user_id[256]; // Did you really mean an array of int here ?
int session_id[256];
std::string buffer;
};
相关文章:
- wcstombs_s(),转换字符串的长度
- 使用 CStringW/CStringA 和 CT2W/CT2A 转换字符串有什么区别?
- 无法转换字符串插入函数的参数
- 转换字符串向量:基于先前的值跳过元素
- 从中间器转换字符串不起作用,出了什么问题?
- 失败的证明转换字符串到枚举类
- 如何使用正则表达式和提升转换迭代器标记和转换 c 字符串
- 使用java jni时转换字符串类型
- 如何避免在转换字符串令牌流时重复istringstream构造
- 阿托伊未正确转换字符串
- C++,转换字符串,使连续下划线序列变为单个下划线
- 使用长算术转换字符串
- 转换字符串十进制数时的精度
- 将词法转换字符串提升为双精度
- 使用marshal_as函数转换字符串的性能
- C++不会从数据转换字符串
- 无论如何,在c++ /Qt中转换字符串到结构中的字段
- C++ 隐式类型转换字符串 -> int?
- 转换字符串到浮点数,c++实现
- 用于转换字符串大小写的函数