char阵列在C 并将其与其他合并

Char array at c++ and merge it with other

本文关键字:其他 合并 阵列 char      更新时间:2023-10-16

我想在创建它时向char数组添加一些变量。我怎样才能做到这一点?sqlite3_prepare_v2需要char[]。谢谢

unsigned int keyid = 10;
char buffer2[] = "SELECT * FROM table WHERE id = " + keyid; // problem (convert to char and merge)
sqlite3_prepare_v2(db, buffer2, strlen(buffer2), &stmt, 0);

您应该绑定参数。这也防止了SQL注入攻击的任何潜力。

unsigned int keyid = 10;
const char buffer2[] = "SELECT * FROM table WHERE id = ?";
sqlite3_prepare_v2(db, buffer2, -1, &stmt, 0);
sqlite3_bind_int(&stmt, 1, keyid);

C 最明显的解决方案是使用std::string

std::string buffer2 = "SELECT * FROM table WHERE id = " + std::to_string(keyid);
sqlite3_prepare_v2(db, buffer2.c_str() , buffer2.size() , &stmt, 0);

将字符串放入string:)

std::string buffer2 = "SELECT * FROM table WHERE id = " + std::to_string(keyid);
sqlite3_prepare_v2(db, buffer2.c_str(), buffer2.length(), &stmt, 0);

您可以流式传输不同的类型,因为您正在使用C

#include <sstream>
//...
std::stringstream buffer2;
buffer2 << "SELECT * FROM table WHERE id = " << keyid;

然后使用需要C样式字符串的字符串c_str

buffer2.str().c_str()'

由于这是SQL,因此在查询中使用参数要好得多。

查看sprintf,例如

sprintf(buffer2, "SELECT * FROM table WHERE id = %d", keyID);

http://www.cplusplus.com/reference/cstdio/sprintf/

相关文章: