使用字符数组(非null终止)c/c++写入stdout
Write to stdout using character array (not null terminated) c/c++
使用字符数组写入stdout最简单的方法是什么?我想输出一个大得多的数组的切片,并且该切片不是空终止的。我希望避免将切片复制到"正确"的以null结尾的c字符串。
有一个我一开始没有找到的非常明显的解决方案。CCD_ 1是CCD_。
void WriteChunk(char *buffer, size_t startpos, size_t length) {
std::cout.write(buffer + startpos, length);
}
所以CCD_ 3起作用。
std::copy
似乎正是你想要的:
#include <iostream> // for std::cout
#include <algorithm> // for std::copy
#include <iterator> // for std::ostream_iterator
//...
char arr[] = "abcdefij";
std::copy(arr + 2, arr + 5, std::ostream_iterator<char>(std::cout, ""));
此示例将写入标准输出:cde
。
这里是一个活生生的例子。
如果你知道字符数组的边界,那么你可以写:
char* arr = new char[N];
for(size_t i = min_indx; i < max_indx; ++i) {
cout << arr[i];
}
您只需要确保min_indx在0和N-1之间,max_indx介于0和N之间。
由于我们都喜欢库函数来做事,下面是使用std::copy
:的方法
copy(arr + min_indx, arr + max_indx, ostream_iterator<char>(cout, ""));
ostream::write
应该可以工作。
#include <iostream>
int main() {
char a[] = "ABCDEFGHIJ";
std::ostream out(std::cout.rdbuf());
out.write(a, 2);
}
编辑
不需要创建单独的ostream对象,因为std::cout
本身就是一个osttream对象。所以CCD_ 9是足够的。
好吧,这是"愚蠢想法的部门":
class partial_print_wrapper
{
private:
const char *str;
int start;
int end;
public:
partial_print_wrapper(const char *s, int st, int en) : str(s), start(st), end(en) {}
friend ostream& operator <<(ostream &os, const partial_print_wrapper& pw);
};
ostream& operator <<(ostream &os, const partial_print_wrapper& pw)
{
for(int i = pw.start; i < pw.end; i++)
{
os << pw.str[i];
}
return os;
}
char *s = "Something quite long";
cout << print_string_wrapper(s, 3, 8) << endl;
相关文章:
- 如何将stdout重定向到stderr
- C++|以一种很好的方式将树(不一定是二进制的)打印到stdout
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- 尝试在 Windows 上重定向 stdout 和 stderr——_fileno(stdout) 返回 -2
- pybind11将python sys.stdout从print()重定向到c++
- 当使用带有stdin和stdout重定向的双进程管道时,如何避免stdin上的重复输入
- 如何将控制台(stdout)添加为g3log中的接收器
- CreateProcess stdout with CreateNamedPipe Overlapped
- 使用参数 + stdout + stderr 从命令行调用 MFC 应用程序
- visual Redirect stdout/stderr to null vs2017 c++
- fprintf stdout 没有 100% 准确转储数据
- 如何将"cout"、"cerr"、"stdout"和"stderr"从C++程序定向到单个文件
- 写入 /dev/stdout 的程序:如何发送 EOF?
- 为什么PNG图像的stdout有时会在printf中刷新图像的一半
- stdin,stdout,stderr是如何关闭的
- 为什么我在C 代码的Stdout上得到响应
- 通过stdin/stdout和qdatastream与Qprocess进行通信
- 在Stdout上似乎是僵局
- 在Qt中:我可以输出到“stdout”吗,就像使用qDebug()输出到“stderr”一样简单
- 为什么在Shell输出中运行的可执行操作到stdout,而不是崩溃时的stderr