[英]C++ stringstream string to function(test, char *test2)
有一個 MySQL 查詢函數,需要帶一個字符串參數。 看起來像這樣:
cin >> user_string;
stringstream ss;
ss << "select * from " << user_string;
函數看起來像這樣:
mysql_perform_query(MYSQL *connection, char *sql_query)
嘗試轉換為 ss.c_str(); 或 ss.str().c_str(); 不起作用。
這樣做的正確方法是什么? 跳過 Stingstream 並構建字符? C++ 字符串讓我困惑...
ss.str().c_str()
是const char *
不是必需的char *
。 我會將ss.str().c_str()
復制到char *
然后將其傳遞給函數。
ss.str().c_str()
如果只有你的函數是正確的
mysql_perform_query(MYSQL *connection, const char *sql_query);
這是因為c_str()
返回const char *
。
如果您能夠將mysql_perform_query
函數更改為const char *
那么我會這樣做。 否則你可以考慮做一個 const_cast, const_cast<char*>(ss.str().c_str())
。
萬一mysql_perform_query 確實修改了傳遞給它的C 字符串,那么您必須將字符串復制到一個向量並傳遞一個指向該向量的指針。
string str = ss.str();
vector<char> tmp(str.begin(), str.end());
tmp.push_back('\0');
mysql_perform_query(connection, &tmp[0]);
mysql_perform_query
不想要const char *
是不尋常的。
如果這是您的代碼,請將其更改為接受const char *
並且您的方法將起作用。
mysql_perform_query( connection, user_string.str().c_str() );
如果您無法更改該函數簽名,這將起作用*。
mysql_perform_query( connection, &user_string.str()[0] );
*保證在 C++11 中工作,雖然在 C++03 中不保證,但在所有常見實現中都有效
SQL 接口可能需要char const*
。 ss.str()
會給你一個字符串, ss.str().c_str()
會給你一個來自該字符串的char const*
。
然而,要指出(比任何東西都更有風格):
除非您確實需要stringstream
的雙向容量,否則最好使用更簡單的ostringstream
(僅輸出),並且
如果您所做的只是串聯,則根本沒有使用流的意義,只需在字符串上使用+
運算符即可。 (您也可以使用+
來連接字符串和字符串文字。)流實際上是用於格式化和解析的,對於簡單的連接來說是多余的(不必要的增加了復雜性)。
stringstream 有一個返回 std::string 的 str 方法; std::string 有一個 c_str() 方法,它返回一個指向 char 的指針。
mysql_perform_query(connection, ss.str().c_str());
在發布問題之前,您確實進行了適當的搜索,不是嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.