我有一个istream,我需要读取具体数量的字节但我不知道它的长度。它被终止。我想我可以1)写一个循环并一次读取一个字节2)告诉它给我一个缓冲区或字符串,它现在开始直到某个字节(在这种情况下为0)。或者3)一次只读取一个字节的buf并将其检查为0,如果不是,则将其附加到字符串。
第三我知道我可以做,但其他2听起来像istream可能是可能的(在这种情况下它是一个文件流)。我还在阅读istream的文档。很多。
答案 0 :(得分:13)
由于你不知道它的长度,最简单的是:
std::string strBuf;
std::getline( istream, strBuf, '\0' );
答案 1 :(得分:2)
2}可以使用istream
的{{3}}:
std::istream is = ...;
const int MAX_BUFFSIZE = 512;
char buffer[MAX_BUFFSIZE];
is.getline(buffer, MAX_BUFFSIZE, '\0'); // Get up to MAX_BUFFSIZE - 1 bytes until the first null character (or end of stream)
请注意,这会从输入流中删除分隔符(空字符),但不会将其附加到缓冲区(对于此示例,这是getline()
和get()
之间的差异)。但是,空字符会自动附加到缓冲区;所以,最后一个字节将包含空字符,但它将从流中删除。
答案 2 :(得分:1)
看起来像是超载:
istream& get (char* s, streamsize n, char delim );
来自http://www.cplusplus.com/reference/iostream/istream/get/的将解决您的问题;将'\0'
设为delim
。还有一个版本(显示在http://www.cplusplus.com/reference/string/getline/)将返回std::string
。