使用istream读取null终止字符串的最简单方法?

时间:2011-03-14 03:59:47

标签: c++ istream

我有一个istream,我需要读取具体数量的字节但我不知道它的长度。它被终止。我想我可以1)写一个循环并一次读取一个字节2)告诉它给我一个缓冲区或字符串,它现在开始直到某个字节(在这种情况下为0)。或者3)一次只读取一个字节的buf并将其检查为0,如果不是,则将其附加到字符串。

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

3 个答案:

答案 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