Чтение из командной строки в C - PullRequest
1 голос
/ 20 февраля 2012

У меня есть программа (на C), которая запускается в командной строке, и я хочу, чтобы она принимала строки произвольной длины от пользователей.Если бы я программировал на C ++, я бы, вероятно, использовал бы функцию getline () в строковой библиотеке, но я не могу найти эквивалент C.Нужно ли мне просто читать символы в блоках длины X, а если строка превышает длину X, сделать новый больший блок и скопировать данные в новый блок?

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

Вы можете использовать fgets с sscanf.

Обратите внимание, что getline теперь присутствует в текущем стандарте POSIX: 2008.

http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html

0 голосов
/ 20 февраля 2012

Вы можете использовать realloc() для увеличения вашего входного буфера.Нет необходимости копировать данные;это делает это для вас.Общий шаблон:

if (n_read >= buf_size) {
  buf_size *= 2;
  *buf = realloc(sizeof(char) * buf_size);
}
0 голосов
/ 20 февраля 2012

Используйте библиотеку readline http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html (если вам не нравится лицензия, есть также BSD-эквивалент).

Оттуда вы можете использовать функцию readline(), котораявернет вам char * строки, набранной пользователем (обязательно вызовите free(), когда закончите, иначе у вас будет утечка памяти).Есть даже опции, которые вы можете установить, чтобы пользователи могли нажимать стрелку вверх, чтобы получить их предыдущую строку (как почти во всех других терминалах).

...