Я нашел решение, которое работает на VC ++, поскольку Nim решение работает только на компиляторе GCC (однако большое спасибо. Благодаря вашему ответу я нашел другие ответы, которые мне помогли!).
Похоже, что у других людей есть похожие проблемы. Я сделал точно так же, как здесь и здесь .
Таким образом, чтобы читать из памяти точно так же, как образует поток, вы должны сделать это:
class membuf : public streambuf
{
public:
membuf(char* p, size_t n) {
setg(p, p, p + n);
}
};
int main()
{
char buffer[] = "Hello World!\nThis is next line\nThe last line";
membuf mb(buffer, sizeof(buffer));
istream istr(&mb);
string line;
while(getline(istr, line))
{
cout << "line:[" << line << "]" << endl;
}
}
РЕДАКТИРОВАТЬ: И если у вас есть '\ r \ n' новые строки, сделайте, как писал Ним:
if (*line.rbegin() == '\r') line.erase(line.end() - 1);
Я пытаюсь обработать эту память как wistream
. Кто-нибудь знает, как это сделать? Я задавал отдельный вопрос для этого.