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