C++ stringstream string to function(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并构建char?
不寻常的是,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*
。
To points,然而(比任何东西都更有风格):
-
除非你确实需要的双向能力
stringstream
,可能最好使用更简单的ostringstream
(只输出)和 -
如果你所做的只是串联,那就没有意义了在使用流时,只需在字符串上使用
+
操作符。(您也可以使用+
来连接字符串和字符串文字)。流实际上是用于格式化和解析的是否为了简单而过度(不必要的增加复杂性)连接。
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(' ');
mysql_perform_query(connection, &tmp[0]);
ss.str().c_str()
是必需的const char *
而不是char *
。我将ss.str().c_str()
复制到char *
,然后将其传递给函数。
stringstream有一个STR方法,返回std::string;Std::string有一个c_str()方法,它返回一个指向char类型的指针。
mysql_perform_query(connection, ss.str().c_str());
你在发表你的问题之前确实做了适当的搜索,不是吗?