std :: stringstream.str()输出垃圾

时间:2013-09-24 14:47:36

标签: c++ opencv std

我需要保存一堆带有编号索引的图像文件。我正在尝试使用stringstream构造这些文件名。但是,stringstream.str()似乎不返回文件名,而是返回一些垃圾。

以下是代码:

std::stringstream filename;
filename << filepath << fileindex << ".png";
bool ret = imwrite(filename.str(),frame, compression_params);
fileindex++;
printf("Wrote %s\n", filename.str());

以下是一次执行的输出:

Wrote ╠±0
Wrote ╠±0
Wrote ╠±0
Wrote ╠±0

以下是另一次执行的输出:

Wrote ░‗V
Wrote ░‗V
Wrote ░‗V
Wrote ░‗V

有什么建议吗? imwrite是一个opencv函数,我有[code]使用命名空间cv; [/ code]在文件的顶部 - opencv和std之间是否有一些干扰?

2 个答案:

答案 0 :(得分:4)

filename.str()会返回std::string个对象。你不能直接printf它。格式%s需要C风格的字符串。这应该工作

printf("Wrote %s\n", filename.str().c_str());

在任何情况下,将C风格的函数与C ++对象一起使用并不总是最好的想法。

答案 1 :(得分:4)

您不能将像std::string这样的非POD类型传递给像printf这样的C风格的可变参数函数。

您可以使用C ++输出:

std::cout << "Wrote " << filename.str() << '\n';

或者,如果您喜欢老派的怪异,请为C风格的输出提取C风格的字符串:

printf("Write %s\n", filename.str().c_str());