使用字符数组(非null终止)c/c++写入stdout

Write to stdout using character array (not null terminated) c/c++

本文关键字:c++ stdout 写入 终止 null 字符 数组      更新时间:2023-10-16

使用字符数组写入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;