2009-11-05 2 views
2

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

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.

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

ответ

0

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

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 байт.

+0

Спасибо AlexKR. Я ищу решение, основанное на передаче входного символьного потока в 'streambuf', который, если я правильно понял, выполняет автоматическую операцию изменения размера. – jldupont

0

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

На сайте MSDN для функции ПОЛУЧИТЬ, он говорит:

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

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

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

Или, может быть, я здесь не упущен?

+0

Итак, каков обычный способ борьбы с разделителем, застревающим во входном потоке? (можете ли вы сказать, что я noob с потоками C++ ;-) – jldupont

+2

'.ignore (1)' кажется подходящим. –

+0

+1 к "litb" ... спасибо. – jldupont