Си. Самописная функция ввода строк

компьютеры программирование си

написал я функцию считывания строки произвольной длины http://paste.org/pastebin/view/15716 и возник вопрос: почему, если эту функцию реализовать так
void getline (char *str);
(то есть передавать нашу строку, чтобы писалось напрямую в неё, без return-ов) то выскакивает ошибка сегментирования? В чём разница?

Примечание:
Vovochka1, не понятно) вообще, зачем тут указатель второго порядка? у нас же не матрица, а просто одномерный массив

Примечание:
PetSerAl, функция сама выделяет место под строку

Примечание:
PetSerAl, а, теперь понял, мы передаём по ссылке один char, а не всю строку. Спасибо, буду думать
Ответы:
Вы из своей функции хотите вернуть указатель на char (это и есть строка), а не char.
Соответственно, прототип должен быть void getline (char **str1);
А вызывающий код предворительно выделяет место, куда читать строку, и как Ваша функция узнает, что место закончилось, если она не знает размер выделенного пространства?
>функция сама выделяет место под строку
Каким образом тогда она её возвращает (если учитывать, что функция получает копию параметров, и изменяет свою копию, не затрагивая копию вызывающего кода)?


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.