繁体   English   中英

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

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

使用字符数组写入stdout的最直接方法是什么? 我想输出一个更大数组的切片,并且该切片不是以空字符结尾的。 我想避免将切片复制到“正确”的以null终止的c字符串。

一开始我没有找到一个很明显的解决方案。 std::coutostream一个实例。

void WriteChunk(char *buffer, size_t startpos, size_t length) {
    std::cout.write(buffer + startpos, length);
}

所以std::cout.write可以解决问题。

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, ""));

好的,这是“愚蠢的想法部门”:

 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;

ostream::write应该可以工作。

#include <iostream>
int main() {
    char a[] = "ABCDEFGHIJ";
    std::ostream out(std::cout.rdbuf());
    out.write(a, 2);
}

编辑

不需要创建单独的ostream对象,因为std::cout本身就是一个ostream对象。 所以std::cout.write就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM