чтение ввода из потока строк - PullRequest
3 голосов
/ 20 мая 2011

Я читаю ввод в массив символов размера 5,

stringstream ss;

char a[5];

if (!ss.read(a, 5))
{
    // throw exception
}

if (!ss.get(a, 5))
{
   // throw exception
}

Кажется, что обе эти функции работают, есть ли разница?

Ответы [ 4 ]

7 голосов
/ 20 мая 2011

ss.read будет считывать 5 байтов из потока, если только он не достигнет конца потока.

ss.get будет считывать 4 байта, если только он не достигнет разделителя ('\ n') или конца потока. Он также завершит строку нулем.

3 голосов
/ 20 мая 2011

http://www.cplusplus.com/reference/iostream/istream/read/ http://www.cplusplus.com/reference/iostream/istream/get/

Чтение - это когда вам нужны блоки данных (например: ss.read (a, 2)) - это не сохраняет его как c-строку и не завершается нулем.

Get - извлекает символы из потока и сохраняет их в виде c-строки в массив, начинающийся с ss.Выполнение останавливается, если есть такие разделительные символы, как '\ n'.

3 голосов
/ 20 мая 2011

Первый будет читать 5 байтов, останавливаясь рано только при обнаружении EOF.

Последний будет читать 4 байт (оставляя место для нулевого завершения), рано останавливаясь при обнаружении EOF или при обнаружении '\n'.

То, что вы хотите, зависит от того, намереваетесь ли вы a вести себя семантически как C-строка.

1 голос
/ 20 мая 2011

ss.get дает вам неформатированные данные, ss.read - блок, оба унаследованы от istream link

...