簡體   English   中英

C++ stringstream 字符串到函數(test, char *test2)

[英]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.

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