1

我需要保存一堆带有编号索引的图像文件。我正在尝试使用字符串流构造这些文件名。但是, 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]using namespace cv;[/code] - opencv 和 std 之间是否存在一些干扰?

4

2 回答 2

4

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

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

在任何情况下,对 C++ 对象使用 C 风格的函数并不总是最好的主意。

于 2013-09-24T14:49:00.577 回答
4

您不能将非 POD 类型传递std::string给 C 风格的可变参数函数,例如printf.

您可以使用 C++ 输出:

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

或者,如果您喜欢老式的怪异,请提取 C 样式字符串以用于 C 样式输出:

printf("Write %s\n", filename.str().c_str());
于 2013-09-24T14:49:39.210 回答