gpt4 book ai didi

c++ - 垃圾值被插入到 SQLite 数据库中

转载 作者:行者123 更新时间:2023-11-30 00:45:38 28 4
gpt4 key购买 nike

enter image description here将值插入数据库,整数值被正确插入,但字符串值被一些垃圾值替换。使用 %s 或 %q 作为字符串的占位符。

int sl_no1 = sl_no;
int ac_no1 = account_no;
string u_name = name;
string u_add = address;
int u_bal = bal;
cout<<sl_no1<<endl<<ac_no1<<endl<<u_name<<endl<<u_add<<endl<<u_bal;

/** Create SQL statement */
//sql = "INSERT INTO ACCOUNT (SL_NO,ACCOUNT_NO, NMAE, ADDRESS, BALANCE) VALUES (" << sl_no1 <<", '"<< ac_no1 <<",'" << u_name <<", '"<< u_add <<", '" << u_bal << "')";
sql = sqlite3_mprintf("INSERT INTO ACCOUNT VALUES('%d','%d','%q','%q','%d' )", sl_no1,ac_no1,u_name, u_add, u_bal);

/** Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
else
{
fprintf(stdout, "Records created successfully\n");
}

最佳答案

我很确定将 std::string 作为参数传递给 是不可能的1可变参数函数,使用 .c_str()所有字符串的方法。

sqlite API 是一个 API,因此函数需要 对于 "%s" 说明符,std::string 不是一回事,您可以通过 .c_str() 使用它的内部数据 方法,它是 std::string 对象的表示,是一个有效的 .


1严格来说这显然是可能的,因为你做到了,但是

  • 这是未定义的行为,垃圾值就在那里,因为该函数试图取消引用 std::string,这就是为什么它是未定义的行为。

    <
  • 编译器可能会对此发出警告,如果您使用的是 gcc,几乎可以肯定它会这样,您要么忽略警告,要么在没有警告的情况下编译。

关于c++ - 垃圾值被插入到 SQLite 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786305/

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