7

我有一个 istream,我需要准确读取特定数量的字节,但我不知道它的长度。它是空终止的。我在想我可以 1)写一个循环并一次读取一个字节 2)告诉它返回一个缓冲区或字符串,从现在开始直到某个字节(在这种情况下为 0)。或 3) 一次准确地读入一个字节并检查它是否为 0,如果不是,则将其附加到字符串中。

第三个我知道我可以做到,但其他两个听起来像是 istream 可能(在这种情况下是文件流)。我仍在阅读 istream 的文档。有很多。

4

3 回答 3

13

由于您不知道它的长度,因此最简单的方法是:

std::string strBuf;
std::getline( istream, strBuf, '\0' );
于 2011-03-14T04:05:01.027 回答
2

数字 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()。但是,空字符会自动附加到缓冲区中;因此,最后一个字节将包含空字符,但将从流中删除。

于 2011-03-14T04:03:43.520 回答
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.

于 2011-03-14T04:04:08.557 回答