簡體   English   中英

C ++中的Char數組,並將其與其他數組合並

[英]Char array at c++ and merge it with other

我想在創建字符數組時向其添加一些變量。 我怎樣才能做到這一點? 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);

將字符串放在string :)

std::string buffer2 = "SELECT * FROM table WHERE id = " + std::to_string(keyid);
sqlite3_prepare_v2(db, buffer2.c_str(), buffer2.length(), &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);

由於使用的是C ++,因此可以流式傳輸不同的類型

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

然后在需要ac樣式字符串的地方使用字符串的c_str

buffer2.str().c_str()'

但是由於這是SQL,因此在查詢中使用參數要好得多。

查看sprintf,例如

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM