Реализовать функцию getline, которая будет считывать поссимвольно ввод и вернет C-style строку.
дана начальная сигнатура функции: char *getline();
И тут еще один вопрос попути)
Разве функция должна вернуть строку, а не указатель на нее ?
Ну и в общем то основной вопрос:
Я знаю как выделять память, с этим проблем вроде как нет, но изначально мы не знаем сколько символов будет дано, выходит нам нужно считывать и перевыделять память, так?
Не слишком ли это "дорого" ?
Я знаю как выделять память в стиле C и C++
В C есть realloc - которая сама изменит размер выделенной памяти
А вот в стиле C++ нет.
Если я выделяю память:
new [], то для изменения размера, мне нужно удалить ее delete[] и выделить новую размером больше, так?
И выходит что для реализации необходимой функции (считать посимвольный ввод и вернуть C-style строку), нужно будет удалять выделенную память и создавать больше, и так при каждом новом символе, пока не дойдем до конца?
Пока мне кажется это каким-то оченьсильным костылем, и проще воспользоваться realloc т.к он сам все сделает
В Cи нет строк как таковых - там строка это массив байт с завершающим нулевым байтом в конце.
А массив в Си - это указатель.
В С++ используйте string - его для этого и придумали, чтоб не парится в каждом приложении с подобными вещами.
Если чисто в Си, то на каждый символ, конечно дергать память не выгодно, поэтому выделяйте память кусками.
Например - задавайте фиксированный начальный размер буфера и размер приращения. Часто, вместо приращения удваивают размер буфера. Стратегия может быть разной. Для простых приложений можно вообще выделить фиксированный размер буфера (достаточно большой) и не перевыделять память.
Не забывайте для обозначения конца строки вручную вставлять нулевой байт в конце строки. Конец строки не обязан совпадать с концом буфера.
alex4answ, В С++ вы можете использовать функции Си.
Не забывайте при выделении памяти, что для строки памяти нужно на 1 байт больше, чем символов в строке.