Вопрос

Я читаю istream::получить и сомнение все еще висит.Допустим, мой разделитель на самом деле является символом NULL '\0', что произойдет в этом случае?Из того, что я прочитал:

If the delimiting character is found, it is not extracted from the input sequence and remains as the next character to be extracted. Use getline if you want this character to be extracted (and discarded). The ending null character that signals the end of a c-string is automatically appended at the end of the content stored in s.

Причина, по которой я предпочел бы «получить» «строке чтения», заключается в возможности извлечь поток символов в «streambuf».

Это было полезно?

Решение

Если у вас есть что-то подобное, то разделитель не застрянет во входном потоке:

std::string read_str(std::istream & in)
{
        const int size  = 1024;
        char pBuffer[size];
        in.getline(pBuffer, size, '\0');
        return std::string(pBuffer);
}

просто пример, если у вас есть разделитель «\0», а длина строки не превышает 1024 байта.

Другие советы

Я не совсем понимаю вашу проблему.

На сайте msdn для функции get написано:

Во всех случаях разделитель не извлекается из потока и не возвращается функцией.Функция getline, напротив, извлекает, но не сохраняет разделитель.Во всех случаях разделитель не извлекается из потока и не возвращается функцией.Функция getline, напротив, извлекает, но не сохраняет разделитель.

http://msdn.microsoft.com/en-us/library/aa277360(VS.60).aspx

Я не думаю, что у вас возникнут проблемы, поскольку на сайте msdn указано, что разделитель не извлекается из потока и не возвращается функцией.

Или, может быть, я здесь что-то упускаю?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top