有一个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 ++字符串让我困惑....
答案 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());
在发布问题之前,您确实进行了正确的搜索,不是吗?