为什么stringstream查询变量不起作用?
std::stringstream query (stringstream::in | stringstream::out | stringstream::binary);
for(vector<uchar>::iterator it=buff.begin();it !=buff.end();it++)
{
query<<*it;
}
cout<<query.str().length();
printf("output:%s",query);
[编辑]
Mat data=image;//image is ROI (50X50) from IplImage* getting Matrix data.
std::vector<uchar> buff;
std::vector<int> p;
p.push_back(CV_IMWRITE_PNG_COMPRESSION);
p.push_back(9);
cv::imencode(".png", data, buff);//for ROI image data to "png" vector buff.
std::vector<char> query(buff.size()*2+1); //MooingDuck's codes...
int len = mysql_real_escape_string(handle, &query[0], (const char*)&buff[0], query.size());
query.resize(len);
我收到错误:
0040CF5F jmp _escape_string_for_mysql + 0F2h(40CFA2h)0040CF61 mov al,byte ptr [edi]&lt; ---------------------------------------错误点 0040CF63 movsx ecx,al 0040CF66 cmp ecx,5Ch 0040CF69 ja _escape_string_for_mysql + 0E5h(40CF95h)
答案 0 :(得分:2)
因为您使用printf
错误。最好不要使用printf
。
std::cout << query.str();
此外,在此处指定binary
几乎没用,in
/ out
是多余的(stringstream
默认为/ out)。
答案 1 :(得分:1)
stringstream::binary
没有按照您的想法行事。
stringstream::binary
使得流不会将系统换行符转换为C ++换行符。 stringstream::text
使流将系统换行符转换为C ++换行符
它们都不会将流读或写为“二进制代码”。
C ++换行符是\n
,而Windows系统换行符是\r\n
(两个字符!),而linux只使用\n
。我听说Mac系统换行符是\n\r
但我无法确认。
此外,在观察到Oli Charlesworth和Cat Plus Plus时,printf
不适用于C ++对象。请改用std::cout
,或将std::string
转换为const char*
理解的printf
。
根据你的评论判断,你想要的东西是
std::vector<char> query(buff.size()*2+1);
int len = mysql_real_escape_string(mysql, &query[0], (const char*)&buff[0], query.size());
query.resize(len);
这将转义buff
中的二进制数据,以便安全地插入到mysql查询中。