我有一个 istream,我需要准确读取特定数量的字节,但我不知道它的长度。它是空终止的。我在想我可以 1)写一个循环并一次读取一个字节 2)告诉它返回一个缓冲区或字符串,从现在开始直到某个字节(在这种情况下为 0)。或 3) 一次准确地读入一个字节并检查它是否为 0,如果不是,则将其附加到字符串中。
第三个我知道我可以做到,但其他两个听起来像是 istream 可能(在这种情况下是文件流)。我仍在阅读 istream 的文档。有很多。
由于您不知道它的长度,因此最简单的方法是:
std::string strBuf;
std::getline( istream, strBuf, '\0' );
数字 2) 可以使用以下getline
方法:istream
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()
。但是,空字符会自动附加到缓冲区中;因此,最后一个字节将包含空字符,但将从流中删除。
它看起来像重载:
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
.