使用字符数组写入stdout最直接的方法是什么?我想输出一个更大的数组的切片,切片不是以空值终止的。我想避免将切片复制到“正确的”以null结尾的c-string。
答案 0 :(得分:13)
一开始我没有找到一个非常明显的解决方案。 std::cout
是ostream
的实例。
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
就足够了。