我需要保存一堆带有编号索引的图像文件。我正在尝试使用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之间是否有一些干扰?
答案 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());