繁体   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