C++ stringstream string to function(test, char *test2)

C++ stringstream string to function(test, char *test2)

本文关键字:char test2 test stringstream string to function C++      更新时间:2023-10-16

有一个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());

你在发表你的问题之前确实做了适当的搜索,不是吗?