std::stringstream.str() 输出垃圾
std::stringstream.str() outputs garbage
我需要保存一堆带有编号索引的图像文件。我正在尝试使用字符串流构造这些文件名。但是,stringstream.str() 似乎没有返回文件名,而是返回一些垃圾。
这是代码:
std::stringstream filename;
filename << filepath << fileindex << ".png";
bool ret = imwrite(filename.str(),frame, compression_params);
fileindex++;
printf("Wrote %sn", filename.str());
下面是一次执行的输出:
Wrote ╠±0
Wrote ╠±0
Wrote ╠±0
Wrote ╠±0
下面是另一个执行的输出:
Wrote ░‗V
Wrote ░‗V
Wrote ░‗V
Wrote ░‗V
有什么建议吗?是 imwrite 是一个 opencv 函数,我有 [代码]使用命名空间 cv;[/code] 在文件顶部 - OpenCV 和 STD 之间是否存在一些干扰?
您不能将 std::string
这样的非 POD 类型传递给 C 风格的可变参数函数(如 printf
)。
您可以使用C++输出:
std::cout << "Wrote " << filename.str() << 'n';
或者,如果你喜欢老派的怪异,提取 C 风格的字符串作为 C 风格的输出:
printf("Write %sn", filename.str().c_str());
filename.str()
返回一个std::string
对象。你不能直接printf
它。格式%s
需要 C 样式字符串。这应该有效
printf("Wrote %sn", filename.str().c_str());
在任何情况下,将 C 样式函数与C++对象一起使用并不总是最好的主意。
您可以使用一些帮助程序函数打印f std::stringstream对象:-
#include <sstream>
#include <stdio.h>
template<typename T>
auto hp(T const & t){
return t;
}
auto hp(std::string const & ss){
return ss.c_str();
}
auto hp(std::ostringstream & ss){
return ss.str();
}
template<typename ... Args>
void printer2(Args const&...args){
printf(hp(args)...);
}
template<typename ... Args>
void printer(Args&&...args){
printer2(hp(args)...);
}
int main() {
std::ostringstream ss;
ss << "One";
std::string str {"Two"};
printer("%s %s %s %c %d", ss, str, "Three", 'n', 7);
}
https://godbolt.org/z/rzvz76neE
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- std::stringstream.str() 输出垃圾
- c++ stringstream输出性能
- 使用stringstream输出一个四舍五入的浮点数
- 无法从stringstream中解析数字并正确输出
- 来自stringstream的重复输出