0

有一个 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?C ++字符串让我感到困惑......

4

5 回答 5

1

ss.str().c_str()不是必需const char *char *。我会复制ss.str().c_str()到 achar *然后将其传递给函数。

于 2013-04-25T15:49:31.760 回答
1

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]);
于 2013-04-25T15:49:39.430 回答
1

mysql_perform_query想要const char *.

如果那是您的代码,请将其更改为接受 aconst char *并且您的方法将起作用。

mysql_perform_query( connection, user_string.str().c_str() );

如果您无法更改该函数签名,这将起作用*。

mysql_perform_query( connection, &user_string.str()[0] );

*保证在 C++11 中工作,虽然在 C++03 中不保证,但在所有常见实现中都工作

于 2013-04-25T15:49:52.913 回答
1

SQL 接口可能需要一个char const*. ss.str() 会给你一个字符串,并ss.str().c_str()char const*从那个字符串给你一个。

然而,要指出的是(比任何东西都更有风格):

  • 除非您实际上需要 的双向容量 stringstream,否则最好使用更简单的 ostringstream(仅输出),并且

  • 如果您所做的只是串联,则根本没有使用流的意义,只需+在字符串上使用运算符即可。(您也可以+用来连接字符串和字符串文字。)流确实用于格式化和解析,并且对于简单的连接来说是多余的(不必要的增加的复杂性)。

于 2013-04-25T15:51:59.570 回答
-2

stringstream 有一个返回 std::string 的 str 方法;std::string 有一个 c_str() 方法,它返回一个指向 char 的指针。

mysql_perform_query(connection, ss.str().c_str());

您在发布问题之前确实进行了适当的搜索,不是吗?

于 2013-04-25T15:50:42.577 回答