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

时间:2013-08-28 18:02:28

标签: c++ stdout

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

5 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:4)

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

Here是一个实例。

答案 2 :(得分:1)

如果您知道字符数组的边界,那么您可以写:

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

答案 3 :(得分:1)

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

 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;

答案 4 :(得分:1)

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就足够了。