C ++ stringstream字符串函数(test,char * test2)

时间:2013-04-25 15:45:32

标签: c++ string parameters char

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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]);

答案 2 :(得分:1)

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中无法保证,但在所有常见实现中都有效

答案 3 :(得分:1)

SQL接口可能需要char const*ss.str() 会给你一个字符串,ss.str().c_str()会给你 来自该字符串的char const*

然而,

要点(比任何东西更多样式):

  • 除非您确实需要双向容量 stringstream,最好使用更简单的方法 ostringstream(仅输出)和

  • 如果你所做的只是串联,那就没有意义了 完全使用流,只需在字符串上使用+运算符。 (您还可以使用+连接字符串和字符串 文字。)流实际上是格式化和解析,和 对于简单而言是过度的(不必要的复杂性) 串联。

答案 4 :(得分:-2)

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

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

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